IC

Iago Carvalho17/09/2023 15:23
Compartilhe

Como Tornar Seu App Mult Languange com Jetpack Compose

    Antes de começar a Ler, Vamos fazer um combinado, vou me esforçar para explicar e demostrar tudo da melhor forma possivel, de maneira bem ilustrativa com fotos e codigos, e voçê vai se esforçar um pouco pra ler até o final e tentar absorver o maximo de conteudo possivel, qual quer Duvida Estou a disposição

    meu Linkedin : https://www.linkedin.com/in/iago-carvalho-b096a21b8/

    Este artigo explica como criar um aplicativo multi-idioma, tanto para Android.

    O objetivo é fornecer um guia passo a passo para que desenvolvedores de todos os níveis de experiência possam criar aplicativos que sejam acessíveis a um público global. Introdução Um aplicativo multi-idioma é um aplicativo que pode ser usado por pessoas de diferentes países e culturas.

    Isso é importante para que os desenvolvedores possam alcançar um público mais amplo e aumentar o sucesso de seus aplicativos.

    Existem duas maneiras principais de criar um aplicativo multi-idioma:

    Criar um aplicativo separado para cada idioma

    Criar um único aplicativo que suporte vários idiomas

    A primeira opção é mais simples, mas pode ser mais cara e trabalhosa. A segunda opção é mais complexa, mas pode ser mais eficiente e econômica. Neste artigo, vamos nos concentrar na segunda opção, que é a mais comum.

    Passo a passo Para criar um aplicativo multi-idioma, siga estas etapas:

    1 . Separe os textos do código

    A primeira etapa é separar os textos do código. Isso pode ser feito armazenando os textos em um arquivo separado, como um arquivo XML.

    em seu arquivo res/values clique com o Botão direito, em seguida vá em new e encontre value Resouse file

    1.1

    image

    1.2 apos clicar em Value Resoce File outra janela se abrira

    em primeiro momento localize na janela a parte escrita Location em seguida clique nas setas ao centro da tela >>>>

    image

    1.3 ao clicar nas setas a janela se modificara um pouco,

    parecera uma janela para escolher o idioma, e o pais

    em file name : o nome do Arquivo deve ser Exatamente :

    strings.xml
    

    na aba Langue Selecione o idioma que deseja

    em Specific Region, podemos deixamo como Any Region, ou expecificar qual o pais do idioma, a depender do pais certas palavras podem mudar então fica a seu criterio.

    image

    1.4 Dentro de seu arquivo Strings.xml, podemos Salvar todas as Strings que usaremos em nosso App, como no exemplo a seguir :

    image

    1.5 Aqui as coisas Começam a Ficar um pouco Repetitivas

    Para Cada Idioma que queira Adicionar ao App podemos, Repetir as etapas Anteriores, mudando Apenas o Conteudo do Arquivo Strings.xml

    image

    1.6 Muita Atenção, a TAG name dos arquivos strings.xml devem ser identicas, por favor Veja Atentamente os Arquivos Acima

    Se ja Conhece o Desenvolvimento Android Seja Com Xml ou com jetpack compose, vc pode recuperar cada TAG do arquivo strings.xml onde deseja utilizar, deixando varios arquivos strings.xml com as respequitivas marcações de idioma é o suficiente para o SDK reconhecer o Idioma padrão do dispositivo, e alterar o idoma usado automaticamente, mostrarei como Recuperar Essas Strings com jetpack compose.

    para esse projeto, criei 6 arquivos de string xml :

    image

    2 Criaremos agora um arquivo com o nome de LoginWithEmailAndPassword.kt o nome e a sua escolha ^^

    para recuperarmos os arquimos de string, basta criarmos um Text, com uma função stringResource(id = ) como no exemplo a Seguir :

    image

    com o R.string.SelectYourLangue podemos recuperar a string salva no arquivo strings.xml, aqui a importancia do arquivo ter extamente o mesmo nome, pois o sistema adptara, de acordo com a o idioma padrão do dispositivo,

    caso não tenha entendido oque é esse SelecYourLangue, em cada arquivo que criamos para salvar os idiomas, lembrese que a tag name devem ser iguais: como no exemplo a seguir : ( desculpe se fui redundante, mas quero garantir que iniciantes entendão)

    image

    2.1, Basicamente tudo que é nescessario, para o app se adptar ao idioma do sistema está aqui, agora só e nescessario construir seu Layout e onde quizer passar um Texto, salve em seus arquivos strings.xml, com suas repectivas traduções

    esté artigo não tem a inteção de encinar como criar um layout com jetpack compose, por isso mostrei apenas o nescessario para chamar suas strings, em seu arquivo Compoble, Porem deixo aqui o meu Layout, para dar uma olhada

    fun LoginWithEmailAndPassword(
      onLoginClick: () -> Unit = {},
      onSignUpClick: () -> Unit = {},
      onForgotClick: () -> Unit = {},
      oninglesLanguage: () -> Unit = {},
      onGermanLanguage: () -> Unit = {},
      onEspanhisLanguage: () -> Unit = {},
      onFrenchLanguage: () -> Unit = {},
      onHindiLanguage: () -> Unit = {},
      onPotuguesLanguage: () -> Unit = {},
    ) {
      val colorApp = ColorsApp()
      val colorsAppClass = ColorsApp()
      val email = remember { mutableStateOf("") }
      val passwordAuthentication = remember {
          mutableStateOf("")
      }
      val passwordVisibility = remember {
          mutableStateOf(false)
      }
      val validSubmit = remember(email.value, passwordAuthentication.value) {
          email.value.trim().isNotEmpty() && passwordAuthentication.value.trim().isNotEmpty()
      }
      val context = LocalContext.current
      Column(
          modifier = Modifier
              .fillMaxSize()
              .background(colorApp.backgroundColorsApp),
          verticalArrangement = Arrangement.Center,
          horizontalAlignment = Alignment.CenterHorizontally
    
      ) {
          Column(
              modifier = Modifier
                  .fillMaxWidth()
                  .padding(top = 16.dp),
              horizontalAlignment = Alignment.CenterHorizontally,
              verticalArrangement = Arrangement.Center
          ) {
              Text(
                  text = stringResource(id = R.string.SelectYourLangue), style = TextStyle(
                      fontSize = 24.sp,
                      fontFamily = FontFamily.SansSerif,
                      fontWeight = FontWeight(600),
                      color = Color(0xFF202244),
                  )
              )
              Row(
                  modifier = Modifier
                      .fillMaxWidth()
                      .padding(start = 16.dp, end = 16.dp),
                  verticalAlignment = Alignment.CenterVertically,
                  horizontalArrangement = Arrangement.Center
              ) {
                  IconButton(onClick = {
                      oninglesLanguage()
                  }) {
                      Image(
                          painter = painterResource(id = R.drawable.estadosunidos),
                          contentDescription = ""
                      )
                  }
                  IconButton(onClick = {
                      onGermanLanguage()
                  }) {
                      Image(
                          painter = painterResource(id = R.drawable.alemanha),
                          contentDescription = ""
                      )
                  }
                  IconButton(onClick = {
                      onEspanhisLanguage()
                  }) {
                      Image(
                          painter = painterResource(id = R.drawable.espanha),
                          contentDescription = ""
                      )
                  }
                  IconButton(onClick = {
                      onFrenchLanguage()
                  }) {
                      Image(
                          painter = painterResource(id = R.drawable.franca),
                          contentDescription = ""
                      )
                  }
                  IconButton(onClick = {
                      onHindiLanguage()
                  }) {
                      Image(painter = painterResource(id = R.drawable.india), contentDescription = "")
                  }
                  IconButton(onClick = {
                      onPotuguesLanguage()
                  }) {
                      Image(
                          painter = painterResource(id = R.drawable.brasil),
                          contentDescription = ""
                      )
                  }
    
    
                  fun changeLanguage(language: String) {
                      Lingver.getInstance().setLocale(context, language)
    
                  }
              }
          }
          Column(
              modifier = Modifier
                  .fillMaxSize()
                  .padding(16.dp),
              verticalArrangement = Arrangement.Center,
              horizontalAlignment = Alignment.CenterHorizontally
          ) {
              Text(
                  text = stringResource(id = R.string.letsSingIn),
                  style = TextStyle(
                      fontSize = 24.sp,
                      fontFamily = FontFamily.SansSerif,
                      fontWeight = FontWeight(600),
                      color = Color(0xFF202244),
                  )
              )
              Text(
                  text = stringResource(id = R.string.StartLearning),
                  style = TextStyle(
                      fontSize = 14.sp,
                      fontFamily = FontFamily.Serif,
                      fontWeight = FontWeight(700),
                      color = Color(0xFF545454),
                  )
              )
              Column(
                  modifier = Modifier
                      .fillMaxWidth()
                      .padding(16.dp),
                  horizontalAlignment = Alignment.CenterHorizontally,
                  verticalArrangement = Arrangement.Center
              ) {
                  InputField(
                      valueState = email,
                      labelId = stringResource(id = R.string.email),
                      enabled = true,
                      keyboardType = KeyboardType.Email,
                  )
                  PasswordInput(
                      modifier = Modifier,
                      passwordState = passwordAuthentication,
                      labelId = stringResource(id = R.string.password),
                      enabled = true,
                      passwordVisibility = passwordVisibility
                  )
                  Text(
                      modifier = Modifier
                          .clickable { onForgotClick() }
                          .align(Alignment.End),
                      text = stringResource(id = R.string.ForgotPassword)
                  )
                  Spacer(modifier = Modifier.height(10.dp))
                  SubmitButton(
                      textId = stringResource(id = R.string.SingIn),
                      loadind = false,
                      validInputs = validSubmit
                  ) {
                      onLoginClick()
                  }
                  Spacer(modifier = Modifier.height(10.dp))
                  Text(text = stringResource(id = R.string.withContinue))
                  Spacer(modifier = Modifier.height(10.dp))
                  GoogleButton { onLoginClick() }
                  Spacer(modifier = Modifier.height(10.dp))
                  Divider(thickness = 1.dp)
                  Spacer(modifier = Modifier.height(10.dp))
                  Row {
                      Text(text = stringResource(id = R.string.DonthaveACC))
                      Text(
                          modifier = Modifier.clickable { onSignUpClick() },
                          text = stringResource(id = R.string.SingUp),
                          color = colorsAppClass.ButtonColorStyles
                      )
                  }
    
              }
          }
      }
    }
    

    3 : Layout Com Respequitivas Traduções

    imageimageimage

    Dentro de meu layout tem algumas funções para, mudar o idioma do App dinamicamente, mas isso fica para uma proxima

    se quizer saber como, me conta ai ^^

    Se gostou Desta explicação deixe um comentario, me diga oque tem duvida, e espero que eu te ajuda de alguma forma, um abraço e fique com deus

    Compartilhe
    Comentários (2)
    Raiara Araujo
    Raiara Araujo - 17/09/2023 22:07

    Muito bom!!

    Antero Cruz
    Antero Cruz - 17/09/2023 16:24

    Conteúdo super necessário