Por que não consigo executar todo o meu aplicativo ou site por meio do Google Tradutor e obter uma tradução básica em outro idioma?
Agora você pode!
O nome hokeylization
é um portmanteau, que significa 'localização hokey'
É um pouco piegas porque é muito simples: envia strings para o Google Translate
E é simples, mas também muito poderoso. Possui suporte especial para documentos HTML, HandlebarsJS modelos, e arquivos Markdown.
Você pode traduzir:
- um objeto JavaScript contendo mensagens
- qualquer número de arquivos ou diretórios, sempre percorrendo os diretórios recursivamente
Este documento README.md foi traduzido, usando a própria ferramenta de hokeylization, para todos os idiomas suportados pelo Google Tradutor!
Tenho certeza que não é perfeito, mas espero que seja melhor que nada!
🇸🇦 Árabe 🇧🇩 Bengali 🇩🇪 Alemão 🇧🇷 Inglês 🇪🇸 Espanhol 🇫🇷 Francês 🇹🇩 Hauçá 🇮🇳 Hindi 🇮🇩 indonésio 🇮🇹 Italiano 🇯🇵 Japonês 🇰🇷 coreano 🇮🇳 Marathi 🇵🇱 Polonês 🇧🇷 Português 🇷🇺 Russo 🇰🇪 Swahili 🇵🇭 Tagalo 🇹🇷 Turco 🇵🇰 Urdu 🇻🇳 Vietnamita 🇨🇳 chinês
Esta tradução específica do original README pode estar com defeito -- correções são muito bem-vindas! Envie uma solicitação de pull no GitHub, ou se você não se sentir à vontade para fazer isso, abra um problema
Ao criar um novo problema no GitHub sobre uma tradução, faça:
- inclua o URL da página (copiar/colar da barra de endereços do navegador)
- inclua o texto exato que está errado (copiar/colar do navegador)
- por favor descreva o que está errado -- a tradução está incorreta? a formatação está quebrada de alguma forma?
- gentilmente oferecer uma sugestão de uma tradução melhor, ou como o texto deve ser formatado corretamente
- Obrigada!
- Fonte
- Suporte e Financiamento
- Instalação
- Configuração
- Traduzindo um arquivo de recurso de string JavaScript
- Traduzindo um diretório de arquivos de texto
- Outras opções
- Comandos em lote JSON
Estou tentando ser um desenvolvedor profissional de software de código aberto. eu tenho trabalhado em na indústria de software por muitos anos, criei empresas de sucesso e as vendi para empresas públicas. Recentemente eu perdi meu emprego, e eu realmente não tenho nenhum outro trabalho alinhado
Então, vou tentar escrever um software útil e ver se isso funciona
Se você gosta de usar este software, eu ficaria muito feliz em receber até mesmo o menor contribuição mensal via Patreon
Obrigada!
Para usar a ferramenta de linha de comando, instale usando npm
ou yarn
:
npm install -g hokeylization
yarn global add hokeylization
Para usar como biblioteca, instale a versão lite
, que é bem menor:
npm install -g hokeylization-lite
yarn global add hokeylization-lite
Então veja a ajuda do comando hokey
:
hokey --help
hokey -h
Quer ver a saída em seu idioma ou em outro idioma?
hokey
tenta detectar o idioma automaticamente das variáveis de ambiente do seu shell
Você pode forçar um idioma definindo a variável de ambiente LC_ALL
:
LC_ALL=it hokey --help
Observe que se você instalou o hokeylization-lite
, a ajuda do comando está disponível apenas em inglês
Defina a variável de ambiente GOOGLE_TRANSLATE_PROJECT_ID
para identificar seu projeto do Google Tradutor
Defina a variável de ambiente GOOGLE_APPLICATION_CREDENTIALS
para as credenciais JSON que você baixou
depois de descobrir como a autenticação funciona na nuvem do Google (pode ser divertido)
Se você estiver executando a partir do código-fonte, também poderá colocá-los em um arquivo .env
no código-fonte
diretório eles serão carregados em tempo de execução via dotenv
Sua tabela de strings deve estar em um arquivo JavaScript em uma destas duas formas:
Exportação ES6:
export default {
string_key: "some value",
another_key: "another value",
... more keys ...
}
Exportação CommonJS
module.exports = {
string_key: "some value",
another_key: "another value",
... more keys ...
}
Se este arquivo foi nomeado myfile.en.js
, você pode traduzi-lo para espanhol e alemão com:
hokey -l es,de -o myfile.LANG.js myfile.en.js
O LANG
acima é especial -- é uma palavra reservada nesta ferramenta!
O LANG
é substituído pelo código do idioma para os arquivos de saída
Assim o comando acima cria os arquivos:
myfile.es.js
myfile.de.js
A opção -l
/ --languages
é uma lista separada por vírgulas de códigos de idioma ISO
suportado pelo Google Tradutor
Se o arquivo de saída já existir, ele será examinado para determinar quais chaves já existem. As chaves existentes não serão traduzidas. Traduções para chaves ausentes serão geradas e anexadas ao final do objeto JS. O arquivo inteiro é sempre reescrito.
Para forçar a retradução de todas as chaves, use a -f
/ --force
Você também pode traduzir um diretório de arquivos. A hokeylização visitará recursivamente cada arquivo no diretório e execute seu conteúdo através do Google Tradutor e salve a saída para um arquivo com nome idêntico em uma árvore de diretórios separada
Quando o destino da sua tradução é um diretório, este modo é ativado
A -o
/ --outfile
especifica o diretório de saída
GRANDE AVISO: Ao traduzir diretórios, NÃO especifique um diretório de saída que está dentro do seu diretório de entrada! Se você fizer isso, você:
- induzir recursão infinita
- aumente sua conta do Google
- encha seu disco
- se divertir menos
Aqui está um exemplo do que não fazer:
hokey -l es -o templates/es templates # <--- DON'T DO THIS!
Quando isso é executado, os arquivos traduzidos são gravados em templates/es
e, assim, tornam-se novos
arquivos de origem a serem traduzidos, pois estão em templates/
-- este processo continua
para sempre, não faça isso!
OK, digamos que você tenha alguns modelos de email em um diretório:
templates/email/en/welcome.txt
templates/email/en/welcome.html
templates/email/en/verify-account.txt
templates/email/en/verify-account.html
templates/email/en/reset-password.txt
templates/email/en/reset-password.html
Para traduzir tudo isso para espanhol e alemão, execute:
hokey -l es,de -o templates/email/LANG templates/email/en
Acima, LANG
é uma palavra reservada e será substituída pelo código de idioma ISO
O que acontece quando o acima é executado:
- Os diretórios
templates/email/es
etemplates/email/de
serão criados (se não existirem) - Todos os arquivos em
templates/email/en
serão traduzidos para espanhol e alemão - Os arquivos de saída existentes não serão regenerados a menos que você use
-f
/--force
- Você terminará com uma estrutura de diretórios e arquivos idênticos dentro de
es
ede
como você tem emen
Passe -n
/ --dry-run
para exibir o que seria feito, mas não faça nenhuma chamada de API ou escreva nenhum arquivo
Passe -f
/ --force
para sempre regenerar as traduções, mesmo que já existam
Passe -m
/ --match
para limitar os arquivos processados ao executar no modo diretório
Você pode nem sempre querer traduzir todos arquivos em seu diretório de origem para seu diretório de destino
O valor da -m
/ --match
é uma regex (cuidado com as regras de citação do shell!) que especifica
quais arquivos devem ser traduzidos
Em caso de dúvida, você pode combinar esta opção com -n
/ --dry-run
para ver quais arquivos seriam traduzidos
Às vezes, seu -m
corresponde a muitos arquivos. Use a -e
/ --excludes
para excluir explicitamente
arquivos que de outra forma teriam correspondido
Você pode listar vários regexes, separados por espaços
Um uso comum seria: --excludes node_modules dist \.git build tmp
As strings a serem traduzidas podem conter templates {{ handlebars }}
, com duas ou três chaves
Você provavelmente NÃO quer que as coisas dentro desses modelos sejam traduzidas
Passe o -H
/ --handlebars
, e qualquer coisa dentro de {{ ... }}
não será traduzida
Markdown não é texto nem html, então o Google Tradutor tem algumas dificuldades com isso
O -M
/ --markdown
permite o tratamento especial para arquivos markdown
Com arquivos markdown, se você não usar o -M
, provavelmente encontrará estes problemas:
- Links quebrados. Na tradução, um caractere de espaço aparece após o término de uma descrição de link de remarcação (com
]
), mas antes de seu link de destino começar (com(
). Isso faz com que o markdown seja renderizado incorretamente e o link está quebrado ao visualizar o documento. - Os blocos de código são traduzidos. O tradutor do Google não sabe o que markdown considera código e o que não
- Espaçamento incorreto para blocos de código recuados. O espaçamento é difícil de preservar na tradução
- Coisas dentro de
backticks
serão traduzidas, quando você quase sempre quer que sejam valores literais
Quando o -M
/ --markdown
está ativado:
- O padrão
](
será condensado em](
corrigindo assim os links de markdown quebrados - Um wrapper "sem tradução" será colocado em torno de blocos de código recuados, preservando o recuo adequado e garantindo que eles não sejam traduzidos
- Um wrapper "sem tradução" será colocado ao redor do texto dentro de
backticks
para garantir que eles não sejam traduzidos
Normalmente tudo é processado como texto simples
Se o seu conteúdo for HTML, ele será mutilado a menos que você passe a -p html
/ --process-as html
Para os aventureiros: ao processar arquivos em um diretório, você pode passar a -F
/ --filter
--filter`
para filtrar a saída antes de ser gravada no sistema de arquivos
O valor desta opção deve ser um caminho para um arquivo JS que exporte uma função chamada filter
A função filter
deve ser async
porque await
será chamado sobre ela
Antes que os arquivos sejam gravados no disco, todo o conteúdo do arquivo será passado para a função filter
como uma string
O valor de retorno da função filter
é o que realmente será gravado no armazenamento
Assim, você tem total controle sobre o que finalmente será escrito
O script filter
será procurado nos seguintes locais (com .js
será anexado ao filtro
nome, a menos que já termine em .js
)
- O diretório atual
- Um diretório chamado
.hokey-filters
dentro do diretório atual - Um diretório chamado
${HOME}/.hokey-filters
, onde${HOME}
é o diretório inicial do usuário atual - O [diretório de filtros] integrado (https://github.com/cobbzilla/hokeylization/tree/master/util/filter)
A string filter
pode ter várias palavras. Nesse caso, a primeira palavra é o nome do filtro e
as palavras restantes serão passadas como argumentos para a função filter
Use -h
/ --help
para mostrar a ajuda
Com a -j
/ --json
, você pode executar vários comandos coordenados hokey
Por convenção, este arquivo é chamado hokey.json
, mas você pode nomeá-lo como quiser
Se você passar um diretório como a opção
-j, o
hokeyprocurará por um
hokey.json` nesse diretório
O arquivo JSON deve conter um objeto. Dentro desse objeto, seus nomes de propriedade são os mesmos que
as opções de linha de comando, mais uma propriedade adicional chamada hokey
A propriedade hokey
é um array de comandos a serem executados. As propriedades declaradas nesses comandos serão
substituir quaisquer declarações duplicadas no objeto externo.
Dentro de cada objeto no array hokey
, você deve especificar um name
e os arquivos de entrada e saída
Aqui está um exemplo de um hokey.json
{
"inputLanguage": "en",
"languages": "es,fr,ja", # can also be an array of strings
"force": false,
"match": null,
"processAs": null,
"excludes": ["exclude-1", "exclude-2"],
"handlebars": false,
"markdown": false,
"regular": false,
"dryRun": false,
"filter": "theFilter.js",
"hokey": [
{
"name": "locale names",
"infile": "messages/locales_en.js",
"outfile": "messages/locales_LANG.js",
"handlebars": true
},
{
"name": "CLI messages",
"infile": "messages/en_messages.js",
"outfile": "messages/LANG_messages.js",
"handlebars": true
},
{
"name": "README",
"infile": "README.md",
"outfile": "lang/LANG/",
"excludes": ["lang/", "node_modules/", "\\.git/", "tmp/"],
"filter": "relativizeMarkdownLinks lang",
"markdown": true,
"index": "lang/README.md"
}
]
}
Passe uma matriz de caminhos de arquivo como infiles
em vez de um único caminho infile
, como neste exemplo:
{
... [
{
"name": "my docs",
"infiles": ["README.md", "INSTALL.md", "TUTORIAL.md"],
"outfile": "docs/LANG/",
"markdown": true
]
}
Ao traduzir para vários idiomas, hokey
pode criar um arquivo de índice que lista todas as traduções feitas
e fornece links para eles
Ao gerar índices, você pode ter apenas uma fonte de entrada
Passe a -I
/ --index
, o valor é onde será gerado o arquivo de índice, que pode ser um arquivo
ou um diretório. Se for um diretório, um nome de arquivo padrão será usado, com base no modelo (veja abaixo)
Use o -A
/ --index-template
para determinar como a saída do índice é formatada. Você pode especificar 'html',
'markdown', 'text' ou o caminho do arquivo para o seu próprio modelo HandlebarsJS
Se você especificar seu próprio modelo, também deverá especificar um arquivo (não um diretório) para o -I
/ --index
opção