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/esetemplates/email/deserão criados (se não existirem) - Todos os arquivos em
templates/email/enserã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
esedecomo 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
backticksserã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
backtickspara 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-filtersdentro 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, ohokeyprocurará por umhokey.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