IC

Iago Carvalho17/09/2023 15:23
Compartilhe

Como Tornar Seu App Mult Languange com Jetpack Compose

  • #Kotlin
  • #Android

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