-
Planos Team, Professional, Business, Enterprise e Software UI/UX
Entre em contato com o departamento de Vendas para perguntas sobre o licenciamento.
-
Plano avançado e Enterprise (legado)
Entre em contato com Comércio para perguntas de licenciamento.
O editor In-Context foi projetado para ajudar os tradutores a realizar tarefas com mais eficiência e traduzir uma página de site por meio da integração direta com o editor de tradução do Strings.
Atualmente, duas versões estão disponíveis:
-
Inclui novas funcionalidades (visualização multilíngue, opções de layout, ações em lote, recursos de colaboração, etc.) e a interface do editor de tradução.
Após instalar o editor In-Context, ele pode ser personalizado para funcionar com muitas tecnologias.
Para usar o editor In-Context, o aplicativo requer:
-
Sites baseados na web, aplicativos web, sites móveis, etc.
-
Os tradutores têm acesso ao servidor web que executa o editor. Isso pode ser um ambiente local, se necessário.
-
Uma estrutura de arquivo de localização de chave-valor.
Sites com strings traduzíveis extraídas e uma camada de visualização que usa uma estrutura de chave-valor para renderizar traduções.
-
Nomes de chave expostos à camada de visualização ou de modelo.
-
Snippet de JavaScript que renderiza o editor.
-
Idealmente, um ambiente dedicado para traduções. Isso pode ser um clone de um ambiente de staging e, embora exija mais trabalho para configurar inicialmente, oferece um fluxo de trabalho melhor e mais estabilidade.
Se um ambiente dedicado não for possível, um ambiente de staging existente pode ser usado com a opção de habilitar o Editor In-Context conforme necessário.
Inclua o snippet de JavaScript no layout da aplicação.
O snippet inclui o código necessário para:
-
Comunicar-se com a Phrase Strings API.
-
Renderizar a interface do usuário.
-
Fornecer login.
O Project ID é encontrado nas configurações do projeto.
O Account ID é encontrado nas configurações da organização do Strings.
Amostra:
<script type="text/javascript">
window.PHRASEAPP_CONFIG={ // Do not change this name for the config to work
accountId: ID DA CONTA
projectId: PROJECT.ID
datacenter: 'eu', // Set to 'us' for US data center
prefix: '{{__', // Set to the prefix for the key format in the view templates
suffix: '__}}', // Set to the suffix for the key format in the view templates
disableShortcuts: false, // Set to true to disable keyboard shortcuts
autoLowercase: true, // Set to false if keys contain capital letters
{
</script>
<script type="module" async="" src="https://cdn.phrase.com/strings/plugins/editor/latest/ice/index.js"></script>
i18next
Nota
O pós-processador do Editor In-Context do i18next Phrase suporta todas as versões do i18next posteriores à 19.5.1. Embora esta biblioteca possa funcionar com versões anteriores também, elas não são oficialmente suportadas e podem não receber atualizações específicas ou correções de bugs.
Para instalar o Editor In-Context neste ambiente, siga estes passos:
-
Instale a biblioteca i18next-phrase-in-context-editor-post-processor com o gerenciador de pacotes de sua preferência:
# yarn yarn add i18next-phrase-in-context-editor-post-processor # npm npm install i18next-phrase-in-context-editor-post-processor
Nota
As versões recomendadas da biblioteca são 1.4.0 ou mais recentes.
ou carregue-a via CDN:
<script src="https://unpkg.com/i18next-phrase-in-context-editor-post-processor"></script>
-
Bootstrap (exemplo):
import i18next from 'i18next'; import i18nextXHRBackend from 'i18next-xhr-backend'; i18next .use(i18nextXHRBackend) .init({ fallbackLng: 'en', debug: true, ns: ['special', 'common'], defaultNS: 'special', backend: { // load some translations from i18next-gitbook repo loadPath: 'https://raw.githubusercontent.com/i18next/i18next-gitbook/master/locales/{{lng}}/{{ns}}.json', crossDomain: true } }, function(err, t) { // do something on i18next initialization });Para integrar a biblioteca:
-
Importe
PhraseInContextEditorPostProcessorda biblioteca i18next-phrase-in-context-editor-post-processor. -
Crie uma nova instância de i18next Phrase In-Context Editor Post Processor, passando PhraseConfig como argumento.
-
Passe a instância recém-criada de i18next Phrase In-Context Editor Post Processor para o método use do i18next.
-
Adicione a string
phraseInContextEditorà propriedade de array postProcess (passada dentro do objeto de configuração do método init do i18next).
-
-
Adicione o snippet JavaScript do ICE à instância do i18next na configuração.
Snippet de exemplo:
i18nextInstance.use(new PhraseInContextEditorPostProcessor({ phraseEnabled: true, projectId: '00000000000000004158e0858d2fa45c', accountId: '0bed59e5', {Nota
accountIddeve ser fornecido para configurar o ICE com sucesso. O ID da conta é encontrado nas configurações da organização do Strings.Se necessário, configure o atributo
useOldICEpara alternar para o ICE antigo:i18nextInstance.use(new PhraseInContextEditorPostProcessor({ phraseEnabled: true, projectId: '00000000000000004158e0858d2fa45c', accountId: '0bed59e5', useOldICE: true, { -
Inicie o editor In-Context.
-
Abra o aplicativo em um navegador da web para exibir o editor In-Context. Faça login com qualquer usuário da organização Phrase.
Nota
O Vue I18n Phrase In-Context Editor suporta todas as versões do Vue I18n 8.17.5 e mais recentes. Esta biblioteca pode funcionar com versões anteriores, mas elas não são oficialmente suportadas e não receberão atualizações específicas ou correções de bugs.
Para instalar o editor In-Context neste ambiente, siga estes passos:
-
Instale o pacote mais recente com o gerenciador de pacotes de sua preferência:
# yarn yarn add vue-i18n-phrase-in-context-editor # npm npm install vue-i18n-phrase-in-context-editor
ou carregue com CDN (registre manualmente
window['vue-i18n-phrase-in-context-editor']):<script src="https://unpkg.com/vue-i18n-phrase-in-context-editor/dist/vue-i18n-phrase-in-context-editor.umd.min.js"></script>
-
Bootstrap (exemplo):
import Vue from 'vue'; import VueI18n from 'vue-i18n'; Vue.use(VueI18n); const i18n = new VueI18n({ locale: process.env.VUE_APP_I18N_LOCALE || 'en', fallbackLocale: process.env.VUE_APP_I18N_FALLBACK_LOCALE || 'en', messages: { "hello": { "hello" : "World", } }); new Vue({ i18n, render: h => h(App) }).$mount('#app');Para integrar a biblioteca:
Nota
Esta biblioteca pode não funcionar com o IE11 ou navegadores mais antigos. Adicione o Babel ao pipeline de compilação se for necessário suporte a navegadores mais antigos.
Esta biblioteca herda componentes comuns dos pacotes react-intl. Se o Phrase estiver habilitado chamando initializePhraseAppEditor, o comportamento dos componentes mudará.
Para instalar o editor In-Context neste ambiente, siga estas etapas:
-
Instale o pacote mais recente via NPM:
npm install react-intl-phraseapp
ou compile a partir do código-fonte:
npm run dist
npm install
-
Configurar
let config = { projectId: '<YOUR_PROJECT_ID>', accountId: '<YOUR_ACCOUNT_ID>', phraseEnabled: true, prefix: "[[__", suffix: "__]]", fullReparse: true {A ID de um projeto é encontrada nas configurações do projeto.
O ID da conta é encontrado nas configurações da organização do Strings.
-
Adicione o snippet ao aplicativo React:
import {initializePhraseAppEditor} from 'react-intl-phraseapp' let config = { projectId: '<YOUR_PROJECT_ID>', accountId: '<YOUR_ACCOUNT_ID>', phraseEnabled: true, prefix: "[[__", suffix: "__]]", fullReparse: true { initializePhraseAppEditor(config); -
Encontre todas as importações de
FormattedMessagee altere a origem dereact-intlparareact-intl-phraseapp.import {FormattedMessage} from 'react-intl-phraseapp' -
Execute testes unitários usando jest:
npm test
Amostra de código
Esta demonstração mostra uma integração do editor In-Context do Phrase com o react-intl.
Pré-requisitos
-
Inscreva-se para uma conta do Phrase Strings.
-
Use o módulo ngx-translate para localização em aplicativos Angular 2.
Para instalar o editor In-Context neste ambiente, siga estes passos:
-
Instale com NPM:
npm install ngx-translate-phraseapp
-
Configurar
import { initializePhraseAppEditor, PhraseConfig } from 'ngx-translate-phraseapp'; let config = { PhraseConfig = { projectId: '<YOUR_PROJECT_ID>', accountID: '<YOUR_ACCOUNT_ID>' phraseEnabled: true, {A ID de um projeto é encontrada nas configurações do projeto.
O ID da conta é encontrado nas configurações da organização do Strings.
Se necessário, configure o atributo
useOldICEpara alternar para o ICE antigo:let config = { projectId: '<YOUR_PROJECT_ID>', accountID: '<YOUR_ACCOUNT_ID>', phraseEnabled: true, useOldICE: true, { initializePhraseAppEditor(config);Se necessário, adicione as URLs específicas dos EUA para permitir o trabalho através do data center dos EUA:
baseUrl: "https://us.app.phrase.com", apiBaseUrl: 'https://api.us.app.phrase.com/api/v2', oauthEndpointUrl: "https://api.us.app.phrase.com/api/v2/authorizations", profileUrl: "https://us.app.phrase.com/settings/profile",
-
Por padrão, o analisador de documentos do editor converte todas as chaves para letras minúsculas. Se estiver enfrentando problemas com esse comportamento e quiser usar chaves que diferenciam maiúsculas de minúsculas dentro do editor, desative o recurso de minúsculas automático:
let config = { { autoLowercase: false } -
Adicione estes snippets ao aplicativo Angular:
app.component.tsimport { initializePhraseAppEditor, PhraseAppCompiler, PhraseConfig} from 'ngx-translate-phraseapp' let config = { PhraseConfig = { projectId: '<YOUR_PROJECT_ID>', accountID: '<YOUR_ACCOUNT_ID>' phraseEnabled: true, { initializePhraseAppEditor(config);app.module.tsimport { TranslateModule, TranslateLoader, TranslateCompiler } from '@ngx-translate/core'; import { HttpClientModule, HttpClient } from '@angular/common/http'; import { PhraseAppCompiler } from 'ngx-translate-phraseapp' import { AppComponent } from './app.component'; export function HttpLoaderFactory(http: HttpClient) { return new TranslateHttpLoader(http); } @NgModule({ declarations: [ AppComponent { imports: [ BrowserModule, HttpClientModule, TranslateModule.forRoot({ loader: { Forneça: TranslateLoader, useFactory: HttpLoaderFactory, deps: [HttpClient] }, compiler: { Forneça: TranslateCompiler, useClass: PhraseAppCompiler } { { providers: [], bootstrap: [AppComponent] })
Amostra de código
Este aplicativo de demonstração apresenta uma integração do editor In-Context com Angular e ngx-translate.
Nota
Esta biblioteca pode não funcionar imediatamente em navegadores mais antigos ou no Microsoft IE11. Adicione o Babel ao pipeline de build se esses navegadores precisarem ser suportados.
Pré-requisitos
-
Inscreva-se para uma conta do Phrase Strings.
Para instalar o editor In-Context neste ambiente, siga estas etapas:
-
Adicione a biblioteca
phraseapp-in-context-editor-rubyao ambiente desejado usando um dos seguintes métodos:-
Via Gem
gem install phraseapp-in-context-editor-ruby
-
Via Bundler
Adicione-a ao
Gemfile:gem 'phraseapp-in-context-editor-ruby
-
Compile a partir do código-fonte para obter a versão mais recente e aprimorada:
bundle && gem build
-
-
Crie o arquivo de inicialização executando o gerador do Rails:
rails generate phraseapp_in_context_editor:install --account_id=<YOUR_ACCOUNT_ID> --project-id=<YOUR_PROJECT_ID>
A ID de um projeto é encontrada nas configurações do projeto.
O ID da conta é encontrado nas configurações da organização do Strings.
-
Adicione o trecho Ruby ao layout do aplicativo
app/views//layouts/application.html.erb:<%= load_in_context_editor %>
-
Adicione a seguinte configuração ao inicializador
/config/initializers/phraseapp_in_context_editor.rb:config.enabled = true config.project_id = "YOUR_PROJECT_ID" config.account_id = "YOUR_ACCOUNT_ID" config.datacenter = "eu"
Se necessário, defina o data center dos EUA para permitir o trabalho com endpoints dos EUA:
config.enabled = true config.project_id = "YOUR_PROJECT_ID" config.account_id = "YOUR_ACCOUNT_ID" config.datacenter = "us"
-
Abra o aplicativo em qualquer navegador da web para ver o editor In-Context aplicado ao aplicativo. Faça login com qualquer usuário da organização Phrase.
Amostra de código
Esta demonstração mostra uma integração do editor Phrase In-Context com o react-i18next.
Pré-requisitos
-
Inscreva-se para uma conta do Phrase Strings.
-
Use o framework Django para Python.
Nota
A versão antiga do ICE não está disponível desde a versão 2.0.0.
Para instalar o editor In-Context neste ambiente, siga estas etapas:
-
Instale o pacote
django-phrasecom pip:$ pip install django-phrase
-
Adicione o Phrase à lista de aplicativos instalados:
INSTALLED_APPS = ( 'phrase', ) -
Adicione os seguintes trechos de modelo ao arquivo de layout
templates/base_generic.htmlou equivalente:{% load phrase_i18n %} {% phrase_javascript %} -
Use a phrase_i18n tag de template nos templates (por exemplo,
demo/ice_demo/templates/index.html):{% load phrase_i18n %} -
Adicione a seguinte configuração ao
settings.py:# Phrase In-Context Editor settings PHRASE_ENABLED = True PHRASE_ACCOUNT_ID = "YOUR_ACCOUNT_ID" # Set your own account id PHRASE_PROJECT_ID = "YOUR_PROJECT_ID" # Set your own project id PHRASE_DATACENTER = "eu" # Choose your datacenter 'eu' | 'us' PHRASE_PREFIX = "{{__" PHRASE_SUFFIX = "__}}"A ID de um projeto é encontrada nas configurações do projeto.
O ID da conta é encontrado nas configurações da organização do Strings.
Em caso de problemas, é possível integrar o trecho JavaScript manualmente.
-
Abra o aplicativo em qualquer navegador da web para ver o editor In-Context aplicado ao aplicativo. Faça login com qualquer usuário da organização Phrase.
Código do adaptador Django no GitHub
Amostra de código
Esta demo de aplicação demonstra como integrar o editor In-Context com uma aplicação Django.
Pré-requisitos
-
Inscreva-se para uma conta do Phrase Strings.
-
Use o framework Flask para Python.
Nota
A versão antiga do ICE não está disponível desde a versão 2.0.0.
Para instalar o editor In-Context neste ambiente, siga estas etapas:
-
Instale o pacote
Flask-Phrasecom pip:pip install Flask-Phrase
-
Adicione a seguinte configuração ao app Flask (
app.configouconfig.py):PHRASEAPP_ENABLED = True PHRASEAPP_PREFIX = '{{__' PHRASEAPP_SUFFIX = '__}}'O código do app deve ser parecido com isto:
from flask import Flask, [...] from flask_babel import Babel from flask_phrase import Phrase, gettext, ngettext app = Flask(__name__) babel = Babel(app) phrase = Phrase(app)
-
Adicione o trecho JavaScript da Phrase ao arquivo de layout base com a seguinte tag (ela deve ir dentro da seção do arquivo de template):
<script> window.PHRASEAPP_CONFIG = { projectId: "YOUR-PROJECT-ID", accountId: "YOUR-ACCOUNT-ID", datacenter: "eu", { (function() { var phrasejs = document.createElement('script'); phrasejs.type = 'module'; phrasejs.async = true; phrasejs.src = 'https://cdn.phrase.com/latest/ice/index.js' var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(phrasejs, s); { </script>A ID de um projeto é encontrada nas configurações do projeto.
O ID da conta é encontrado nas configurações da organização do Strings.
Se necessário, defina o data center dos EUA para permitir o trabalho com endpoints dos EUA:
window.PHRASEAPP_CONFIG = { projectId: "YOUR-PROJECT-ID", accountId: "YOUR-ACCOUNT-ID", datacenter: "us", {
Quando PHRASEAPP_ENABLED = True, o pacote modifica os valores retornados das funções de tradução para apresentar um formato que o ICE possa ler. Quando definido como False, ele voltará para as funções gettext padrão do Flask-Babel.
Amostra de código
Esta demo de aplicação demonstra como integrar o editor In-Context com uma aplicação Flask.
Pré-requisitos
-
Inscreva-se para uma conta do Phrase Strings.
-
Use o Symfony framework para PHP.
Nota
A versão 2.0.0 suporta Symfony 5 ou superior. Se estiver usando o Symfony 2, 3 ou 4, consulte a (versão antiga) do ICE.
Para integrar o editor In-Context com a aplicação Symfony, siga estes passos:
-
Copie
PhraseStringsInContextEditore seu conteúdo para a pasta/src/Servicedo repositório ou para o local desejado. Se colocado em outro lugar, ajuste o namespace adequadamente. -
Ajuste
config/services.yamlpara decorar o serviçotranslatorcom o adaptador da Phrase:services: { App\Service\PhraseStringsInContextEditor\Translator: decorates: translator -
Adicione o seguinte trecho de JavaScript ao template base ou de layout Twig entre o
{% block javascripts %}para que o editor In-Context possa ler a página da web:<script> window.PHRASEAPP_CONFIG = { accountId: '0bed59e5', projectId: '00000000000000004158e0858d2fa45c', datacenter: 'eu', origin: 'phrase-symfony', { (function() { var phrasejs = document.createElement('script'); phrasejs.type = 'module'; phrasejs.async = true; phrasejs.src = 'https://cdn.phrase.com/latest/ice/index.js' var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(phrasejs, s); { </script>A aplicação Symfony está agora conectada ao editor In-Context.
A ID de um projeto é encontrada nas configurações do projeto.
O ID da conta é encontrado nas configurações da organização do Strings.
Se necessário, defina o data center dos EUA para permitir o trabalho com endpoints dos EUA:
window.PHRASEAPP_CONFIG = { projectId: "YOUR-PROJECT-ID", accountId: "YOUR-ACCOUNT-ID", datacenter: "us", { -
Recarregue a aplicação e faça login com as credenciais da Phrase para iniciar o processo de tradução diretamente na página da web.
Amostra de código
Esta aplicação demo demonstra como integrar o editor In-Context com uma aplicação Symfony.
Normalmente, uma camada de visualização renderiza traduções passando o nome de uma string traduzível (ou seja, a chave) para algum tipo de método de tradução ou auxiliar de visualização.
Exemplo de código PHP:
$translations = array(
"page.headline" => "Some Headline",
"page.link.label" => "I am a link",
"page.link.hint" => "Click me"
)
function translate($keyName) {
return $translations[$keyName];
}
O template renderizaria então a saída do método translate() em vez da string traduzida real:
<h1><?php echo translate("page.headline"); ?></h1>
Formatação
Deve ser indicado no template para quais chaves renderizar as traduções.
Use esta formatação para expor nomes de chaves em vez de traduções:
{{__phrase_NameOfYourKey__}}
Exemplo:
Se a chave page.headline estiver no template, renderize a string {{__phrase_page.headline__}}.
Modifique o método auxiliar translate() para expor nomes de chaves no formato necessário:
function translate($keyName) {
if ($phraseModeEnabled) {
return "";
} else {
return $translations[$keyName];
}
}
Dependendo do framework, auxiliares de tradução no código podem ser sobrescritos ou uma versão encapsulada pode ser criada para usar em templates.
Exemplo:
const t = (key: string) => '{{__phrase_' + key + '__}}'
Garanta que os nomes das chaves sejam convertidos para um formato reconhecível.
Os caracteres na lista a seguir precisam ser escapados quando expostos ao editor In-Context:
|
Caractere |
Sequência de escape |
Exemplo: |
|---|---|---|
|
{ |
|
{{__phrase__<key__}} torna-se {{__phrase__key[[[[[[html_open]]]]]]__}} |
|
{ |
|
{{__phrase__key>__}} torna-se {{__phrase__[[[[[[html_close]]]]]]key__}} |
Por padrão, o analisador de documentos do Editor In-Context converte todas as chaves para minúsculas. Se você estiver enfrentando problemas com esse comportamento e quiser usar chaves que diferenciam maiúsculas de minúsculas no Editor In-Context, desative o recurso automático de conversão para minúsculas.
window.PHRASEAPP_CONFIG = {
autoLowercase: false
}
Ao usar o Editor In-Context, os nomes das chaves geralmente são envolvidos com decoradores (chaves, por padrão) para gerar chaves de identificação exclusivas dentro do contexto de um documento:
{{__phrase_YOUR.KEY__}}
Se isso causar conflitos com outras bibliotecas (por exemplo, mecanismos de modelo do lado do cliente, incluindo AngularJS e Ember.js) que usam uma sintaxe semelhante, altere o prefixo e o sufixo do decorador do Editor In-Context na configuração. Para informar ao Editor In-Context quais decoradores o analisador deve procurar, adicione os seguintes valores de configuração antes do snippet JavaScript:
window.PHRASEAPP_CONFIG = {
prefix: '[[__',
suffix: "__]]"
}
Isso diz ao editor para procurar por tags que começam com [[__ e terminam com __]]:
[[__phrase_YOUR.KEY__]]
Se estiver usando a gem phraseapp-in-context-editor-ruby para fornecer a funcionalidade do editor In-Context, certifique-se de que os decoradores estejam configurados:
PhraseApp::InContextEditor.configure do |config| config.prefix = "[[__" config.suffix = "__]]" end
Se não estiver usando a gem, certifique-se de que o padrão de exposição do nome da chave seja ajustado no código personalizado.
Esta configuração só está disponível ao usar a gem phraseapp-in-context-editor-ruby.
O editor In-Context é desabilitado por padrão.
O editor In-Context pode ser explicitamente habilitado ou desabilitado. Isso afeta a inclusão do snippet JavaScript (ao usar o view helper) e a renderização dos nomes de chave decorados nas views:
PhraseApp::InContextEditor.enabled = true|false
Exemplo de vinculação da flag a uma variável de ambiente:
PhraseApp::InContextEditor.enabled = (ENV["IN_CONTEXT_EDITING"] == "1")
Habilite fullReparse se estiver usando o editor In-Context com um framework JavaScript que usa Virtual DOM, como o React. Isso permite o reparsing adequado quando alterações no DOM são detectadas:
window.PHRASEAPP_CONFIG = {
fullReparse: true
}
Classes listadas na opção hidingClasses são tratadas como ocultas e excluídas pelo scanner do editor In-Context. Para tornar elementos com uma determinada classe escaneáveis, remova esse nome de classe do array hidingClasses em vez de adicioná-lo. Adicionar um nome de classe ao array exclui elementos correspondentes e oculta o botão de edição; remover um nome de classe do array inclui elementos correspondentes e exibe o botão de edição.
A opção hidingClasses realiza uma verificação estática de presença de classe em um elemento e seus ancestrais. Ela não avalia a visibilidade computada ou responsiva. Um elemento que usa uma classe utilitária responsiva que corresponde a uma entrada em hidingClasses (por exemplo, uma classe chamada "hidden" combinada com uma classe de visibilidade específica de breakpoint) é excluído da varredura, independentemente de estar realmente visível na viewport atual. Evite usar nomes de classe listados em hidingClasses puramente para estilização responsiva em elementos que precisam ser escaneados.
O editor In-Context pode ser configurado para escapar ou alterar traduções antes que sejam inseridas na página da web, fornecendo uma função para a propriedade sanitize.
A função aceita a string de tradução como o primeiro argumento e deve retornar uma string:
import escape from “lodash/escape”;
window.PHRASEAPP_CONFIG = {
sanitize: escape
}
logon único
Se estiver usando single sign-on e quiser inicializar o editor In-Context com SSO ativado, adicione o seguinte valor de configuração antes do snippet JavaScript:
window.PHRASEAPP_CONFIG = {
sso: {
enabled: true,
provider: 'saml',
identifier: [insert_company_identifier]
}
}
Para exigir que os usuários façam login usando SSO, defina o parâmetro enforced:
window.PHRASEAPP_CONFIG = {
sso: {
enforced: true
}
}
Para páginas com um grande número de chaves traduzíveis, o Editor In-Context carrega as chaves em páginas de 100. Apenas as chaves na primeira página têm seus marcadores de edição conectados no carregamento. As chaves restantes aparecem como não traduzidas até que a página seja rolada ainda mais ou uma chave seja pesquisada diretamente, já que uma pesquisa direta ignora a paginação. Não há opção de configuração para aumentar o tamanho da página, pois a paginação ocorre no lado do servidor e não por meio da biblioteca cliente.
Para verificar o status da tradução de todas as chaves sem depender da rolagem, clique no ícone de pesquisa no Editor In-Context para abrir a lista de chaves. A lista de chaves mostra a contagem total de chaves já integradas versus chaves ausentes no projeto, e pode ser alternada para mostrar todas as chaves no projeto em vez de apenas as chaves detectadas na página atual. Alternativamente, verifique a integridade da tradução para o trabalho relevante diretamente no editor de tradução de Strings, que não possui esse limite de renderização baseado em página.
Para instalar o editor In-Context neste ambiente, siga estas etapas:
-
Instale com NPM:
npm install ngx-translate-phraseapp
-
Configurar
let config = { projectId: '<YOUR_PROJECT_ID>', phraseEnabled: true, prefix: "{{__", suffix: "__}}", fullReparse: true {A ID de um projeto é encontrada nas configurações do projeto.
-
Por padrão, o analisador de documentos do editor converte todas as chaves para minúsculas. Se estiver enfrentando problemas com esse comportamento e quiser usar chaves que diferenciam maiúsculas de minúsculas dentro do editor, desative o recurso de minúsculas automático:
let config = { { autoLowercase: false } -
Adicione estes snippets ao aplicativo Angular:
app.component.tsimport { initializePhraseAppEditor, PhraseAppCompiler} from 'ngx-translate-phraseapp' let config = { projectId: '<YOUR_PROJECT_ID>', phraseEnabled: true, prefix: "{{__", suffix: "__}}", fullReparse: true { initializePhraseAppEditor(config);app.module.tsimport { TranslateModule, TranslateLoader, TranslateCompiler } from '@ngx-translate/core'; import { HttpClientModule, HttpClient } from '@angular/common/http'; import { PhraseAppCompiler } from 'ngx-translate-phraseapp' export function HttpLoaderFactory(http: HttpClient) { return new TranslateHttpLoader(http); } @NgModule({ declarations: [ AppComponent { imports: [ BrowserModule, HttpClientModule, TranslateModule.forRoot({ loader: { Forneça: TranslateLoader, useFactory: HttpLoaderFactory, deps: [HttpClient] }, compiler: { Forneça: TranslateCompiler, useClass: PhraseAppCompiler } { { providers: [], bootstrap: [AppComponent] })
Amostra de código
Este aplicativo de demonstração apresenta uma integração do editor In-Context com Angular e ngx-translate.
Para instalar o editor In-Context neste ambiente, siga estas etapas:
-
Instale o angular-phrase via Bower (ou baixe manualmente):
$ bower install angular-phrase
-
Adicione o módulo angular-phrase à aplicação AngularJS existente após carregar o módulo angular-translate:
var myApp = angular.module("myApp", ['pascalprecht.translate', 'phrase']); -
Configure o módulo:
myApp.value("phraseProjectId", "YOUR-PROJECT-ID"); myApp.value("phraseEnabled", true); myApp.value("phraseDecoratorPrefix", "");A ID de um projeto é encontrada nas configurações do projeto. Isso cria um arquivo de inicialização com algumas opções de configuração.
-
Adicione a diretiva
phrase-javascriptà aplicação dentro da tag<head>:<phrase-javascript></phrase-javascript>
-
Abra o aplicativo em qualquer navegador da web para ver o editor In-Context aplicado ao aplicativo. Faça login com qualquer usuário da organização Phrase.
Amostra de código
Esta aplicação de demonstração para angular-phrase mostra como localizar AngularJS com angular-translate.
Para instalar o editor In-Context neste ambiente, siga estas etapas:
-
Instale o pacote
django-phrasecom pip:$ pip install django-phrase
-
Adicione o Phrase à lista de aplicativos instalados:
INSTALLED_APPS = ( 'phrase', ) -
Use a tag de template phrase_i18n nos templates:
{% load phrase_i18n %}Para permitir que o
django-phrasesubstitua métodos de tradução, carregue phrase_i18n após i18n. -
Adicione o snippet JavaScript ao layout:
{% phrase_javascript %} -
Configure o Editor In-Context para o projeto com estas opções:
PHRASE_ENABLED = TruePHRASE_PROJECT_ID = 'YOUR_PROJECT_ID'PHRASE_PREFIX = '{{__'PHRASE_SUFFIX = '__}}' -
Abra o aplicativo em qualquer navegador da web para ver o editor In-Context aplicado ao aplicativo. Faça login com qualquer usuário da organização Phrase.
Código do adaptador Django no GitHub
Amostra de código
Esta aplicação de demonstração mostra como integrar o editor In-Context com uma aplicação Django.
Nota
Esta biblioteca pode não funcionar com o IE11 ou navegadores mais antigos. Adicione o Babel ao pipeline de compilação se for necessário suporte a navegadores mais antigos.
Esta biblioteca herda componentes comuns dos pacotes react-intl. Se o Phrase estiver habilitado chamando initializePhraseAppEditor, o comportamento dos componentes será alterado.
Para instalar o editor In-Context neste ambiente, siga estas etapas:
-
Instale o pacote via NPM:
npm install react-intl-phraseapp
ou compile a partir do código-fonte:
npm run dist
npm install
-
Configurar
let config = { projectId: '<YOUR_PROJECT_ID>', phraseEnabled: true, prefix: "[[__", suffix: "__]]", fullReparse: true {A ID de um projeto é encontrada nas configurações do projeto.
-
Adicione o snippet ao aplicativo react:
import {initializePhraseAppEditor} from 'react-intl-phraseapp' let config = { projectId: '<YOUR_PROJECT_ID>', phraseEnabled: true, prefix: "[[__", suffix: "__]]", fullReparse: true { initializePhraseAppEditor(config); -
Encontre todas as importações de
FormattedMessagee altere a origem dereact-intlparareact-intl-phraseapp.import {FormattedMessage} from 'react-intl-phraseapp' -
Execute testes unitários usando jest:
npm test
Amostra de código
Esta demo mostra uma integração do editor In-Context do Phrase com o react-intl.
Para instalar o editor In-Context neste ambiente, siga estas etapas:
-
Adicione a gem
phraseapp-in-context-editor-rubyao ambiente com o qual você deseja usar o Editor In-Context:group :development do gem 'phraseapp-in-context-editor-ruby' end
e instale-a executando o comando bundle:
$ bundle install
-
Instale a gem
phraseapp-in-context-editor-rubyexecutando o gerador do Rails:$ bundle exec rails generate phraseapp_in_context_editor:install --access-token=YOUR_ACCESS_TOKEN --project-id=YOUR_PROJECT_ID
Token de acesso
Crie e gerencie tokens de acesso nas configurações de perfil ou pela API de Autorizações.
project.id
A ID de um projeto é encontrada nas configurações do projeto. Isso cria um arquivo de inicialização com algumas opções de configuração.
-
Adicione o snippet JavaScript ao layout do seu aplicativo dentro da tag
<head>usando o helperphraseapp_in_context_editor_js:<head> { <%= phraseapp_in_context_editor_js %> { </head> -
Abra o aplicativo em qualquer navegador da web para ver o editor In-Context aplicado ao aplicativo. Faça login com qualquer usuário da organização Phrase.
-
Desative o Turbolinks (se utilizado)
O Turbolinks remove todos os elementos da interface do Editor In-Context da página a cada carregamento de página.
Adicione o atributo
data-no-turbolinkà tag<body>:<body <%= PhraseApp::InContextEditor.enabled? ? "data-no-turbolink" : "" %>>
Amostra de código
Esta demo mostra uma integração do editor In-Context do Phrase com o react-i18next.
Para instalar o editor In-Context neste ambiente, siga estas etapas:
-
Certifique-se de que o package
com.phraseapp.incontexteditoresteja disponível no aplicativo. -
Defina o ID de projeto correto e ajuste os outros parâmetros em
PhraseAppConfiguration.class. -
Para renderizar todas as traduções através do Phrase, adicione o bean ao aplicativo:
@Bean @Conditional(PhraseAppEnabledCondition.class) public MessageSource messageSource() { return new PhraseAppMessageSource(); } -
Forneça o helper JavaScript necessário nos templates expondo o helper como um bean:
@Bean public PhraseAppJavascriptHeader phraseAppJavascriptHeader() { return new PhraseAppJavascriptHeader(); } -
Adicione a tag
<script>aos seus templates dentro da tag<head>de cada página:<head> <script th:utext="${@phraseAppJavascriptHeader.getHeader()}"></script> </head> -
Reinicie o aplicativo e faça login com as credenciais de usuário do Phrase.
Código-fonte do aplicativo de exemplo no GitHub
Para instalar o editor In-Context neste ambiente, siga estas etapas:
-
Crie um novo ambiente no qual o editor In-Context será executado. No exemplo, o novo ambiente é chamado de
translation.Crie um novo arquivo de configuração:
# app/config/config_translation.yml imports: - { resource: config.yml } parameters: translator.class: Acme\YourBundle\Translation\PhraseTranslator -
Crie um controlador para tornar o ambiente acessível pelo navegador:
# web/app_translation.php <?php require_once __DIR__.'/../app/bootstrap.php.cache'; require_once __DIR__.'/../app/AppKernel.php'; use Symfony\Component\HttpFoundation\Request; $kernel = new AppKernel('translation', false); $kernel->handle(Request::createFromGlobals())->send(); -
Substitua o método de tradução padrão para expor os nomes das chaves ao editor In-Context:
# Acme/YourBundle/Translation/PhraseTranslator.php <?php namespace Acme\YourBundle\Translation; use Symfony\Bundle\FrameworkBundle\Translation\Translator as BaseTranslator; class PhraseTranslator extends BaseTranslator { public function trans($id, array $parameters = array(), $domain = 'messages', $locale = null) { $prefix = ""; if (!isset($locale)) { $locale = $this->getLocale(); } if (!isset($this->catalogues[$locale])) { $this->loadCatalogue($locale); } if ($domain == 'routes') { // Return translated values for 'routes' domain return strtr($this->catalogues[$locale]->get((string) $id, $domain), $parameters); } else { // Return PhraseApp translation keys for all other domains return $prefix.$id.$suffix; } } } -
Adicione o snippet JavaScript ao layout:
# Acme/YourBundle/Resources/views/layout.html.twig
-
Abra o aplicativo em qualquer navegador da web para ver o editor In-Context aplicado ao aplicativo. Faça login com qualquer usuário da organização Phrase.
Para instalar o editor In-Context neste ambiente, siga estas etapas:
-
Crie um novo ambiente no qual o editor In-Context será executado. No exemplo, o novo ambiente é chamado de
translation.Crie um novo arquivo de configuração:
# app/config/config_translation.yml imports: - { resource: config.yml } -
Crie um controlador para tornar o ambiente acessível pelo navegador:
# web/app_translation.php <?php use Symfony\Component\HttpFoundation\Request; $loader = require __DIR__.'/../app/autoload.php'; $kernel = new AppKernel('translation', true); $kernel->loadClassCache(); $request = Request::createFromGlobals(); $response = $kernel->handle($request); $response->send(); $kernel->terminate($request, $response); -
Substitua o método de tradução padrão para expor os nomes das chaves ao editor In-Context:
# src/AppBundle/Translation/PhraseTranslator.php <?php namespace AppBundle\Translation; use Symfony\Bundle\FrameworkBundle\Translation\Translator as BaseTranslator; class PhraseTranslator extends BaseTranslator { public function trans($id, array $parameters = array(), $domain = 'messages', $locale = null) { $prefix = ""; if (null === $domain) { $domain = 'messages'; } // Return ID of translation key with pre- and suffix for PhraseApp return $prefix.$id.$suffix; } } -
Certifique-se de que a classe seja sempre substituída quando o pacote for usado com um compiler pass:
# src/AppBundle/DependencyInjection/Compiler/OverrideServiceCompilerPass.php <?php namespace AppBundle\DependencyInjection\Compiler; use Symfony\Component\DependencyInjection\Compiler\CompilerPassInterface; use Symfony\Component\DependencyInjection\ContainerBuilder; class OverrideServiceCompilerPass implements CompilerPassInterface { public function process(ContainerBuilder $container) { $definition = $container->getDefinition('translator.default'); $definition->setClass('AppBundle\Translation\PhraseTranslator'); } } -
Se estiver usando compiler passes separados, registre-os no método build() da classe do pacote:
# src/AppBundle/AppBundle.php <?php namespace AppBundle; use Symfony\Component\HttpKernel\Bundle\Bundle; use Symfony\Component\DependencyInjection\ContainerBuilder; use AppBundle\DependencyInjection\Compiler\OverrideServiceCompilerPass; class AppBundle extends Bundle { public function build(ContainerBuilder $container) { parent::build($container); if($container->getParameter("kernel.environment") == 'translation') { $container->addCompilerPass(new OverrideServiceCompilerPass()); { } } -
Adicione o snippet JavaScript ao layout:
# src/YourBundle/Resources/views/layout.html.twig
-
Abra o aplicativo em qualquer navegador da web para ver o editor In-Context aplicado ao aplicativo. Faça login com qualquer usuário da organização Phrase.
Nota
O Vue I18n Phrase In-Context Editor oferece suporte a todas as versões do Vue I18n, a partir da 8.17.5 e posteriores. Esta biblioteca pode funcionar com versões anteriores, mas elas não são oficialmente suportadas e não receberão atualizações específicas ou correções de bugs.
Para instalar o editor In-Context neste ambiente, siga estas etapas:
-
Instale o pacote com o gerenciador de pacotes de sua preferência:
# yarn yarn add vue-i18n-phrase-in-context-editor # npm npm install vue-i18n-phrase-in-context-editor
ou carregue com CDN (registre manualmente
window['vue-i18n-phrase-in-context-editor']):<script src="https://unpkg.com/vue-i18n-phrase-in-context-editor/dist/vue-i18n-phrase-in-context-editor.umd.min.js"></script>
-
Bootstrap (exemplo):
import Vue from 'vue'; import VueI18n from 'vue-i18n'; Vue.use(VueI18n); const i18n = new VueI18n({ locale: process.env.VUE_APP_I18N_LOCALE || 'en', fallbackLocale: process.env.VUE_APP_I18N_FALLBACK_LOCALE || 'en', messages: { "hello": { "hello" : "World", } }); new Vue({ i18n, render: h => h(App) }).$mount('#app');Para integrar a biblioteca:
O In-Context Editor oferece suporte a Ajax e manipulação de DOM (ou seja, via JavaScript) usando observadores de mutação.
O modo Ajax pode causar problemas em alguns casos e pode resultar em sérios problemas de desempenho ao usar o editor In-Context. Para desativar o modo Ajax, adicione o seguinte valor de configuração antes do snippet JavaScript:
window.PHRASEAPP_CONFIG = {
ajaxObserver: false
}
Para ativar o modo de depuração, adicione o seguinte valor de configuração antes do snippet JavaScript:
window.PHRASEAPP_CONFIG = {
debugMode: true
}
Para definir uma localidade específica explicitamente ao iniciar o In-Context editor, use a configuração forceLocale. Isso é útil para pré-selecionar a localidade exibida atualmente em sua aplicação web no editor In-Context também:
window.PHRASEAPP_CONFIG = {
forceLocale: "pt-BR"
}
Esta configuração só está disponível ao usar a gem phraseapp-in-context-editor-ruby.
Chaves podem ser excluídas de serem exibidas com o editor In-Context. Ao trabalhar com Rails, chaves podem ser ignoradas para dados como mensagens de erro ou chaves de formato de data e hora. Para excluir chaves de serem manipuladas automaticamente pela gem phraseapp-in-context-editor-ruby, adicione uma matriz das chaves ao arquivo de inicialização phraseapp_in_context_editor.rb. Curingas também podem ser usados:
PhraseApp::InContextEditor.configure do |config| config.ignored_keys = ["date.*", "forbidden.key", "errors.messages*"] end
Chaves que correspondem a qualquer um desses padrões não serão disponibilizadas para o editor In-Context e são exibidas normalmente.