×

Langue

Fermer
Atelier 801
  • Forums
  • Dev Tracker
  • Connexion
    • English Français
      Português do Brasil Español
      Türkçe Polski
      Magyar Română
      العربية Skandinavisk
      Nederlands Deutsch
      Bahasa Indonesia Русский
      中文 Filipino
      Lietuvių kalba 日本語
      Suomi עברית
      Italiano Česky
      Hrvatski Slovensky
      Български Latviešu
      Estonian
  • Langue
  • Forums
  • /
  • Transformice
  • /
  • Modules
  • /
  • [Tutorial] Sistema de tradução
[Tutorial] Sistema de tradução
Ninguem
« Consul »
1482794340000
    • Ninguem#0095
    • Profil
    • Derniers messages
    • Tribu
#1
  0
Então você fez um module divertido e quer compartilhar com todo o Transformice? Mas é melhor deixar os textos em inglês ou em português? Por que não os dois? Neste tópico ensino uma maneira prática de deixar o seu jogo com o idioma adequado de acordo com a comunidade do jogador.

Primeiramente, você precisa listar todos os textos de um determinado idioma e definir "chaves" para cada um. A chave é um identificador que vai relacionar um "oi" em português com um "hi" em inglês. Primeiramente, faça todos os textos em apenas um idioma.

Abaixo um exemplo, a sintaxe está definida como <chave> = <texto>. A chave é uma variável, então deve seguir as regras de nome de uma variável. O ideal é colocar um nome que seja fácil de saber do que se trata.

1
2
3
4
WELCOME = "Bem vindo"
CONTRATS = "Parabéns!"
PROFILE_CHEESE = "Queijos"
PROFILE_FIRST = "Primeiro lugar"

Depois crie uma tabela com esta estrutura:

1
2
3
4
5
6
7
tabela_exemplo = {
<sigla da comunidade> = {
<chave> = <texto>,
<chave> = <texto>,
...
}
}

Com os textos de exemplo ficaria assim:

Code Lua

1
2
3
4
5
6
7
8
lang = {
br = {
WELCOME = "Bem vindo",
CONTRATS = "Parabéns!",
PROFILE_CHEESE = "Queijos",
PROFILE_FIRST = "Primeiro lugar"
},
}

Para adicionar mais idiomas, crie mais tabelas no mesmo nível do br, copiando as mesmas chaves, mas substituindo os textos.

Code Lua

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
lang = {
br = {
WELCOME = "Bem vindo",
CONTRATS = "Parabéns!",
PROFILE_CHEESE = "Queijos",
PROFILE_FIRST = "Primeiro lugar"
},
en = {
WELCOME = "Welcome",
CONTRATS = "Congratulations!",
PROFILE_CHEESE = "Cheeses",
PROFILE_FIRST = "First position"
},
es = {
WELCOME = "Bienvenido",
CONTRATS = "Congratulaciones!",
PROFILE_CHEESE = "Quesos",
PROFILE_FIRST = "Primero lugar"
},
}

Agora faça uma função que receberá o nome de um jogador, uma chave e retornará um texto. Abaixo um exemplo de como a função deve trabalhar.

Code Lua

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
function translate(jogador, chave)

-- capturar a sigla da comunidade do jogador
local comunidade = "en" -- um valor padrão por via das dúvidas
if tfm.get.room.playerList[jogador] then
comunidade = tfm.get.room.playerList[jogador].community
end

-- se a comunidade do jogador tiver tradução, então...
if lang[comunidade] then

-- se o idioma tiver um texto relacionado com a chave, então...
if lang[comunidade][chave] then
return lang[comunidade][chave]
else
return "ERROR"
end
else

-- aqui definimos um idioma padrão, que será o en
if lang.en[chave] then
return lang.en[chave]
else
return "ERROR"
end
end
end

Um exemplo de como chamar a função:

Code Lua

1
2
3
for i, v in pairs(tfm.get.room.playerList) do
ui.addTextArea(0, translate(i, "WELCOME"), i, 300, 200, 200, nil, nil, nil, 1, true)
end

Então basta substituir todos os locais onde estão os textos e colocar a função no lugar, sempre cuidando com o primeiro parâmetro, que é o nome do jogador, e com o segundo, que é a chave do texto que você quer naquele momento. Certifique-se de que a variável de jogador está correta em todas as tentativas de chamar a função.

Abaixo um outro exemplo da mesma função translate, mas um pouco mais otimizada:

Code Lua

1
2
3
4
5
function translate(p, k)
local cmm = tfm.get.room.playerList[p] and tfm.get.room.playerList[p].community or "en"
cmm = lang[cmm] and cmm or "en"
return lang[cmm][k] or "ERROR"
end

Espero que este tutorial ajude vocês. Qualquer dúvida só comentar.

Dernière modification le 1482794460000
Mescouleur
« Citoyen »
1482794520000
    • Mescouleur#0000
    • Profil
    • Derniers messages
#2
  0
Sempre procurei por um tutorial do tipo
bom tópico
Ronan
« Citoyen »
1482931560000
    • Ronan#3434
    • Profil
    • Derniers messages
#3
  0
otimo topico
Haku
« Sénateur »
1482961260000
    • Haku#0807
    • Profil
    • Derniers messages
#5
  0
Pessoalmente eu prefiro guardar a tabela do idioma em uma variável para reduzir o tempo de execução, assim:

Code Lua

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
lang = {
br = {
welcome = "Bem vindo",
},
en = {
welcome = "Welcome",
},
es = {
welcome = "Bienvenido",
},
}

local roomCommunity = tfm.get.room.community
local textData = text[roomCommunity] or text.en

print(textData.welcome)

Mas isto só é possível usando a comunidade da sala.

Bom tutorial. Muito bem explicado. :)
  • Forums
  • /
  • Transformice
  • /
  • Modules
  • /
  • [Tutorial] Sistema de tradução
© Atelier801 2018

Equipe Conditions Générales d'Utilisation Politique de Confidentialité Contact

Version 1.27