-
Planes Team, Professional, Business, Enterprise y Software UI/UX
Ponte en contacto con el equipo de ventas para preguntar por nuestros planes.
-
Plan Advanced y Enterprise (anteriores)
Ponte en contacto con Ventas para preguntas sobre licencias.
In-context Editor tiene por objeto ayudar al equipo de traducción a hacer las cosas con mayor eficacia y traducir una página web mediante integración directa con el editor de traducción Strings.
Actualmente hay dos versiones disponibles:
-
Incluye nuevas funcionalidades (vista multilingüe, opciones de diseño, acciones por lotes, funciones de colaboración, etc.) e interfaz de usuario en el editor de traducción.
Después de instalar In-context Editor, se puede personalizar para trabajar con muchas tecnologías.
Para usar In-context Editor, la aplicación requiere:
-
Páginas web, aplicaciones web, sitios móviles, etc.
-
Los traductores pueden acceder al servidor web que ejecuta el editor. Este podría ser un entorno local si se requiere.
-
Una estructura de archivos de localización valor-clave.
Sitios web con cadenas traducibles extraídas y una capa de vista que usa una estructura de valor-clave para mostrar traducciones.
-
Nombres clave expuestos a la capa de vista o plantilla.
-
Fragmento de JavaScript que renderiza el editor.
-
Idealmente, un entorno dedicado para las traducciones. Este puedeclonarse de un entorno de ensayo y, aunque requiere más trabajo de configuración inicial, proporciona un mejor flujo de trabajo y más estabilidad.
Si no es posible disponer de un entorno dedicado, se puede utilizar un entorno de ensayo existente con la opción de habilitar el Editor contextual según sea necesario.
Incluye el fragmento de JavaScript en el diseño de la aplicación.
El fragmento incluye el código necesario para:
-
Comunicarse con la API de Phrase Strings.
-
Renderizar la interfaz de usuario.
-
Proporcionar inicio de sesión.
Project ID se encuentra en la configuración del proyecto.
Account ID se encuentra en la configuración de la organización de Strings.
Muestra:
<script type="text/javascript">
window.PHRASEAPP_CONFIG={ // Do not change this name for the config to work
accountId: 'ACCOUNT_ID',
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
i18next Phrase In-Context Editor Post Processo admite todas las versiones i18next anteriores a la 19.5.1. Aunque esta biblioteca podría funcionar también con versiones anteriores, no son compatibles oficialmente y podrían no recibir actualizaciones específicas ni correcciones de errores.
Para instalar In-context Editor en este entorno, sigue estos pasos:
-
Instala la biblioteca i18next Phrase-in-context editor-post-processor con el gestor de paquetes preferido:
# yarn yarn add i18next-phrase-in-context-editor-post-processor # npm npm install i18next-phrase-in-context-editor-post-processor
Nota
Las versiones recomendadas de la biblioteca son la 1.4.0 o más recientes.
O cargar a través de CDN:
<script src="https://unpkg.com/i18next-phrase-in-context-editor-post-processor"></script>
-
Bootstrap (muestra):
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 la biblioteca:
-
Importa
PhraseInContexteditorPostProcessorde la biblioteca i18next-phrase-in-context-editor-post-processor. -
Crea una nueva instancia de i18next Phrase In-Context Editor Post Processor, pasando PhraseConfig como argumento.
-
Pasa la nueva instancia i18next Phrase In-Context Editor Post Processor al método use de i18nex.
-
Añade la cadena
phraseInContextEditora la propiedad de matriz postProcess (pasada dentro del objeto de configuración del método init de i18next).
-
-
Agrega el fragmento de JavaScript de ICE a la instancia de i18next al configurar.
Fragmento de muestra:
i18nextInstance.use(new PhraseInContextEditorPostProcessor({ phraseEnabled: true, projectId: '00000000000000004158e0858d2fa45c', accountId: '0bed59e5', }))Nota
Se debe proporcionar
accountIdpara configurar ICE correctamente. El ID de la cuenta se encuentra en la configuración de la organización de Strings.Si es necesario, configura el atributo
useOldICEpara cambiar a antiguo ICE:i18nextInstance.use(new PhraseInContextEditorPostProcessor({ phraseEnabled: true, projectId: '00000000000000004158e0858d2fa45c', accountId: '0bed59e5', useOldICE: true, })) -
Inicia In-context Editor.
-
Abre la aplicación en un navegador web para mostrar In-context Editor. Inicia sesión con cualquier usuario de la organización Phrase.
Nota
Vue I18n Phrase In-Context Editor es compatible con todas las versiones de Vue I18n 8.17.5 y posteriores. Esta biblioteca puede funcionar con versiones anteriores, pero no son compatibles oficialmente y no recibirán actualizaciones específicas ni correcciones de errores.
Para instalar In-context Editor en este entorno, sigue estos pasos:
-
Instala el paquete más reciente con el gestor de paquetes preferido:
# yarn yarn add vue-i18n-phrase-in-context-editor # npm npm install vue-i18n-phrase-in-context-editor
o cárgalo con CDN (regístralo 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 (muestra):
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 la biblioteca:
Nota
Es posible que esta biblioteca no funcione con IE11 o navegadores más antiguos. Añade Babel a la canalización de compilación si se requiere compatibilidad con navegadores más antiguos.
Esta biblioteca hereda componentes comunes de los paquetes react-intl. Si Phrase está habilitado llamando a initializePhraseAppEditor, el comportamiento de los componentes cambiará.
Para instalar In-context Editor en este entorno, sigue estos pasos:
-
Instala el paquete más reciente mediante NPM:
npm install react-intl-phraseapp
o compila desde el código fuente:
npm run dist
npm install
-
Configurar
let config = { projectId: '<YOUR_PROJECT_ID>', accountId: '<YOUR_ACCOUNT_ID>', phraseEnabled: true, prefix: "[[__", suffix: "__]]", fullReparse: true };El ID de proyecto de un proyecto se encuentra en la configuración del proyecto.
Account ID se encuentra en la configuración de la organización de Strings.
-
Añade el fragmento a la aplicación de 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); -
Busca todas las importaciones de
FormattedMessagey cambia la fuente dereact-intlareact-intl-phraseapp.import {FormattedMessage} from 'react-intl-phraseapp' -
Ejecuta pruebas unitarias usando jest:
npm test
Ejemplo de código
Esta demostración muestra una integración del editor In-Context de Phrase con react-intl.
Requisitos previos
-
Sign up Regístrate para obtener una cuenta de Phrase Strings.
-
Utiliza el módulo ngx-translate para la localización en aplicaciones de Angular 2.
Para instalar In-context Editor en este entorno, sigue estos pasos:
-
Instala con 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, };El ID de proyecto de un proyecto se encuentra en la configuración del proyecto.
Account ID se encuentra en la configuración de la organización de Strings.
Si es necesario, configura el atributo
useOldICEpara cambiar a antiguo ICE:let config = { projectId: '<YOUR_PROJECT_ID>', accountID: '<YOUR_ACCOUNT_ID>', phraseEnabled: true, useOldICE: true, }; initializePhraseAppEditor(config);Si es necesario, añade las URL específicas de EE. UU. para habilitar el trabajo a través del centro de datos estadounidense:
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",
-
De forma predeterminada, el analizador de documentos del editor convierte todas las claves a minúsculas. Si experimentas problemas con este comportamiento y quieres utilizar claves que distingan entre mayúsculas y minúsculas dentro del editor, desactiva la función de conversión automática a minúsculas:
let config = { { autoLowercase: false } -
Añade estos fragmentos a la aplicación de 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: { provide: TranslateLoader, useFactory: HttpLoaderFactory, deps: [HttpClient] }, compiler: { provide: TranslateCompiler, useClass: PhraseAppCompiler } }), ], providers: [], bootstrap: [AppComponent] {
Ejemplo de código
Esta aplicación de demostración muestra una integración del editor In-Context con Angular y ngx-translate.
Nota
Es posible que esta biblioteca no funcione directamente en navegadores antiguos o en Microsoft IE11. Añade Babel a la canalización de compilación si es necesario admitir esos navegadores.
Requisitos previos
Para instalar In-context Editor en este entorno, sigue estos pasos:
-
Agregue la biblioteca
phraseapp-in-context-editor-rubyal entorno deseado utilizando uno de los siguientes métodos:-
A través de Gem
gem install phraseapp-in-context-editor-ruby
-
A través de Bundler
Agrégalo al
Gemfile:gem 'phraseapp-in-context-editor-ruby
-
Compila directamente desde el código fuente para obtener la versión más reciente y avanzada:
bundle && gem build
-
-
Cree el archivo de inicialización ejecutando el generador de Rails:
rails generate phraseapp_in_context_editor:install --account_id=<YOUR_ACCOUNT_ID> --project-id=<YOUR_PROJECT_ID>
El ID de proyecto de un proyecto se encuentra en la configuración del proyecto.
Account ID se encuentra en la configuración de la organización de Strings.
-
Agrega el fragmento de Ruby al diseño de la aplicación
app/views//layouts/application.html.erb:<%= load_in_context_editor %>
-
Agrega la siguiente configuración al 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"
Si es necesario, configura el centro de datos de EE. UU. para permitir trabajar con puntos finales de EE. UU.:
config.enabled = true config.project_id = "YOUR_PROJECT_ID" config.account_id = "YOUR_ACCOUNT_ID" config.datacenter = "us"
-
Abre la aplicación en cualquier navegador web para ver el editor In-Context aplicado a la aplicación. Inicia sesión con cualquier usuario de la organización Phrase.
Ejemplo de código
Esta demo muestra una integración del editor In-Context de Phrase con react-i18next.
Requisitos previos
Nota
La versión antigua del ICE no está disponible desde la versión 2.0.0.
Para instalar In-context Editor en este entorno, sigue estos pasos:
-
Instale el paquete
django-phrasecon pip:$ pip install django-phrase
-
Agrega Phrase a la lista de aplicaciones instaladas:
INSTALLED_APPS = ( 'phrase', { -
Agrega los siguientes fragmentos de plantilla al archivo de diseño
templates/base_generic.htmlo equivalente:{% load phrase_i18n %} {% phrase_javascript %} -
Utilice la etiqueta de plantilla phrase_i18n en las plantillas (por ejemplo,
demo/ice_demo/templates/index.html):{% load phrase_i18n %} -
Agrega la siguiente configuración a
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 = "__}}"El ID de proyecto de un proyecto se encuentra en la configuración del proyecto.
Account ID se encuentra en la configuración de la organización de Strings.
En caso de problemas, es posible integrar el fragmento de JavaScript manualmente.
-
Abre la aplicación en cualquier navegador web para ver el editor In-Context aplicado a la aplicación. Inicia sesión con cualquier usuario de la organización Phrase.
Código del adaptador de Django en GitHub
Ejemplo de código
Esta aplicación de demostración muestra cómo integrar el editor en contexto con una aplicación Django.
Requisitos previos
Nota
La versión antigua del ICE no está disponible desde la versión 2.0.0.
Para instalar In-context Editor en este entorno, sigue estos pasos:
-
Instale el paquete
Flask-Phrasecon pip:pip install Flask-Phrase
-
Añade la siguiente configuración a la aplicación Flask (
app.configoconfig.py):PHRASEAPP_ENABLED = True PHRASEAPP_PREFIX = '{{__' PHRASEAPP_SUFFIX = '__}}'El código de la aplicación debería ser similar a esto:
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)
-
Añade el fragmento de JavaScript de Phrase al archivo de diseño base con la siguiente etiqueta (debe ir dentro de la sección del archivo de plantilla):
<script> window.PHRASEAPP_CONFIG = { projectId: "TU-ID-DE-PROYECTO", accountId: "TU-ID-DE-CUENTA", 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>El ID de proyecto de un proyecto se encuentra en la configuración del proyecto.
Account ID se encuentra en la configuración de la organización de Strings.
Si es necesario, configure el centro de datos de EE. UU. para permitir trabajar con puntos finales de EE. UU.:
window.PHRASEAPP_CONFIG = { projectId: "TU-ID-DE-PROYECTO", accountId: "TU-ID-DE-CUENTA", datacenter: "us", };
Cuando PHRASEAPP_ENABLED = True, el paquete modifica los valores devueltos por las funciones de traducción para presentar un formato que el ICE pueda leer. Cuando lo configures en False, volverá a las funciones gettext estándar de Flask-Babel.
Ejemplo de código
Esta aplicación de demostración muestra cómo integrar el editor en contexto con una aplicación Flask.
Requisitos previos
Nota
La versión 2.0.0 es compatible con Symfony 5 y superior. Si usas Symfony 2, 3 o 4, consulta la versión antigua del ICE.
Para integrar el editor In-Context con la aplicación Symfony, sigue estos pasos:
-
Copie
PhraseStringsInContextEditory su contenido en la carpeta/src/Servicedel repositorio o en la ubicación deseada. Si se coloca en otro lugar, ajusta el espacio de nombres en consecuencia. -
Ajusta
config/services.yamlpara decorar el serviciotranslatorcon el adaptador de Phrase:services: { App\Service\PhraseStringsInContextEditor\Translator: decorates: translator -
Añade el siguiente fragmento de JavaScript a la plantilla base o de Twig entre
{% block javascripts %}para que el editor en contexto pueda leer la página 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>La aplicación Symfony está ahora conectada al editor en contexto.
El ID de proyecto de un proyecto se encuentra en la configuración del proyecto.
Account ID se encuentra en la configuración de la organización de Strings.
Si es necesario, configura el centro de datos de EE. UU. para permitir trabajar con puntos finales de EE. UU.:
window.PHRASEAPP_CONFIG = { projectId: "TU-ID-DE-PROYECTO", accountId: "TU-ID-DE-CUENTA", datacenter: "us", }; -
Recarga la aplicación e inicia sesión con las credenciales de Phrase para comenzar el proceso de traducción directamente en la página web.
Ejemplo de código
Esta aplicación demo demuestra cómo integrar el editor en contexto con una aplicación Symfony.
Normalmente, una capa de vista renderiza las traducciones pasando el nombre de una cadena traducible (es decir, la clave) a algún tipo de método de traducción o asistente de vista.
Código PHP de ejemplo:
$translations = array(
"page.headline" => "Some Headline",
"page.link.label" => "I am a link",
"page.link.hint" => "Click me"
{
function translate($keyName) {
return $translations[$keyName];
}
La plantilla renderizaría entonces el resultado del método translate() en lugar de la cadena traducida real:
<h1><?php echo translate("page.headline"); ?></h1>
Formato
Indica en la plantilla para qué claves se deben renderizar las traducciones.
Utiliza este formato para exponer los nombres de las claves en lugar de las traducciones:
{{__phrase_NameOfYourKey__}}
Ejemplo:
Si la clave page.headline está en la plantilla, muestra la cadena {{__phrase_page.headline__}}.
Modifica el método auxiliar translate() para exponer los nombres de las claves en el formato requerido:
function translate($keyName) {
if ($phraseModeEnabled) {
return "";
} else {
return $translations[$keyName];
}
}
Dependiendo del framework, los asistentes de traducción en el código pueden ser sobrescritos o se puede crear una versión envuelta para usar en las plantillas.
Ejemplo:
const t = (key: string) => '{{__phrase_' + key + '__}}'
Asegúrate de que los nombres de las claves se conviertan a un formato reconocible.
Los caracteres de la siguiente lista deben escaparse cuando se exponen al editor en contexto:
|
Carácter |
Secuencia de escape |
Ejemplo: |
|---|---|---|
|
{ |
|
{{__phrase__<key__}} se convierte en {{__phrase__key[[[[[[html_open]]]]]]__}} |
|
{ |
|
{{__phrase__key>__}} se convierte en {{__phrase__[[[[[[html_close]]]]]]key__}} |
De forma predeterminada, el analizador de documentos del editor en contexto convierte todas las claves a minúsculas. Si experimentas problemas con este comportamiento y quieres utilizar claves que distingan entre mayúsculas y minúsculas dentro del editor en contexto, desactiva la función automática de minúsculas:
window.PHRASEAPP_CONFIG = {
autoLowercase: false
}
Cuando uses el editor en contexto, los nombres de las claves suelen envolverse con decoradores (por defecto, llaves) para generar claves de identificación únicas en el contexto de un documento:
{{__phrase_YOUR.KEY__}}
Si esto causa conflictos con otras bibliotecas (por ejemplo, motores de plantillas del lado del cliente, incluidos AngularJS y Ember.js) que utilizan una sintaxis similar, cambia el prefijo y el sufijo del decorador del editor en contexto en la configuración. Para indicar al editor en contexto qué decoradores debe buscar el analizador, añade los siguientes valores de configuración antes del fragmento de JavaScript:
window.PHRASEAPP_CONFIG = {
prefix: '[[__',
suffix: "__]]"
}
Esto te indica al editor que busque etiquetas que comiencen con [[__ y terminen con __]]:
[[__phrase_YOUR.KEY__]]
Si usas la gema phraseapp-in-context-editor-ruby para proporcionar la funcionalidad del editor en contexto, asegúrate de que los decoradores estén configurados:
PhraseApp::InContextEditor.configure do |config| config.prefix = "[[__" config.suffix = "__]]" end
Si no usas la gema, asegúrate de que el patrón de exposición del nombre de la clave esté ajustado en el código personalizado.
Esta configuración solo está disponible cuando usas la gema phraseapp-in-context-editor-ruby.
El editor en contexto está deshabilitado de forma predeterminada.
El editor en contexto puede habilitarse o deshabilitarse explícitamente. Esto afecta a la inclusión del fragmento de JavaScript (cuando se utiliza el asistente de vista) y a la representación de los nombres de clave decorados en las vistas:
PhraseApp::InContextEditor.enabled = true|false
Ejemplo de vinculación de la bandera a una variable de entorno:
PhraseApp::InContextEditor.enabled = (ENV["IN_CONTEXT_EDITING"] == "1")
Habilita fullReparse si usas el editor en contexto con un framework de JavaScript que utiliza Virtual DOM, como React. Esto permite un análisis correcto cuando se detectan cambios en el DOM:
window.PHRASEAPP_CONFIG = {
fullReparse: true
}
Las clases enumeradas en la opción hidingClasses se consideran ocultas y se excluyen del escáner del editor en contexto. Para que los elementos con una clase determinada sean escaneables, elimina ese nombre de clase de la matriz hidingClasses en lugar de añadirlo. Añadir un nombre de clase a la matriz excluye los elementos correspondientes y oculta el botón de edición; quitar un nombre de clase de la matriz incluye los elementos correspondientes y muestra el botón de edición.
La opción hidingClasses realiza una comprobación estática de la presencia de clases en un elemento y sus ancestros. No evalúa la visibilidad calculada o adaptativa. Un elemento que utiliza una clase de utilidad adaptativa que coincide con una entrada en hidingClasses (por ejemplo, una clase llamada "hidden" combinada con una clase de visibilidad específica para el punto de interrupción) se excluye del escaneo independientemente de si es realmente visible en la ventana gráfica actual. Evite utilizar nombres de clase enumerados en hidingClasses puramente para el estilo adaptativo en elementos que necesitan ser escaneados.
El editor en contexto puede configurarse para escapar o alterar las traducciones antes de que se inserten en la página web proporcionando una función a la propiedad sanitize.
La función acepta la cadena de traducción como primer argumento y debe devolver una cadena:
import escape from “lodash/escape”;
window.PHRASEAPP_CONFIG = {
sanitize: escape
}
Inicio de sesión único
Si usas single sign-on y deseas inicializar el In-Context Editor con SSO habilitado, añade el siguiente valor de configuración antes del fragmento de JavaScript:
window.PHRASEAPP_CONFIG = {
sso: {
enabled: true,
provider: 'saml',
identifier: [insert_company_identifier]
}
}
Para que los usuarios inicien sesión mediante SSO, establece el parámetro enforced:
window.PHRASEAPP_CONFIG = {
sso: {
enforced: true
}
}
Para páginas con un gran número de claves traducibles, el Editor en contexto carga las claves en páginas de 100. Solo las claves de la primera página tienen sus marcadores de edición configurados al cargarse. Las claves restantes aparecen sin traducir hasta que desplaces la página o busques una clave directamente, ya que una búsqueda directa evita la paginación. No existe una opción de configuración para aumentar el tamaño de la página, ya que la paginación se produce en el lado del servidor y no a través de la biblioteca cliente.
Para comprobar el estado de la traducción de todas las claves sin depender del desplazamiento, haz clic en el icono de búsqueda en el editor en contexto para abrir la lista de claves. La lista de claves muestra el recuento total de claves ya integradas frente a las claves que faltan en el proyecto, y se puede alternar para mostrar todas las claves del proyecto en lugar de solo las claves detectadas en la página actual. Alternativamente, comprueba la integridad de la traducción para el trabajo relevante directamente en el editor de traducción de Strings, que no tiene este límite de renderizado basado en páginas.
Para instalar In-context Editor en este entorno, sigue estos pasos:
-
Instala con NPM:
npm install ngx-translate-phraseapp
-
Configurar
let config = { projectId: '<YOUR_PROJECT_ID>', phraseEnabled: true, prefix: "{{__", suffix: "__}}", fullReparse: true };El ID de un proyecto se encuentra en la configuración.
-
Por defecto, el analizador de documentos del editor convierte todas las claves a minúsculas. Si experimentas problemas con este comportamiento y deseas usar claves que distingan entre mayúsculas y minúsculas en el editor, desactiva la función automática de minúsculas:
let config = { { autoLowercase: false } -
Añade estos fragmentos a la aplicación 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: { provide: TranslateLoader, useFactory: HttpLoaderFactory, deps: [HttpClient] }, compiler: { provide: TranslateCompiler, useClass: PhraseAppCompiler } }), ], providers: [], bootstrap: [AppComponent] {
Ejemplo de código
Esta demo te muestra cómo integrar el editor en contexto con Angular y ngx-translate.
Para instalar In-context Editor en este entorno, sigue estos pasos:
-
Instala angular-phrase a través de Bower (o descárgalo manualmente):
$ bower install angular-phrase
-
Agrega el módulo angular-phrase a tu aplicación AngularJS existente después de cargar el módulo angular-translate:
var myApp = angular.module("myApp", ['pascalprecht.translate', 'phrase']); -
Configura el módulo:
myApp.value("phraseProjectId", "YOUR-PROJECT-ID"); myApp.value("phraseEnabled", true); myApp.value("phraseDecoratorPrefix", "");El ID de un proyecto se encuentra en la configuración. Esto crea un archivo de inicialización con algunas opciones de configuración.
-
Agrega la directiva
phrase-javascripta tu aplicación dentro de la etiqueta<head>:<phrase-javascript></phrase-javascript>
-
Abre la aplicación en cualquier navegador web para ver el editor en contexto aplicado a la aplicación. Inicia sesión con cualquier usuario de la organización Phrase.
Ejemplo de código
Esta demo te muestra cómo localizar AngularJS con angular-translate.
Para instalar In-context Editor en este entorno, sigue estos pasos:
-
Instala el paquete
django-phrasecon pip:$ pip install django-phrase
-
Agrega Phrase a la lista de aplicaciones instaladas:
INSTALLED_APPS = ( 'phrase', { -
Usa la etiqueta de plantilla phrase_i18n en las plantillas:
{% load phrase_i18n %}Para permitir que
django-phraseanule los métodos de traducción, carga phrase_i18n después de i18n. -
Agrega el fragmento de JavaScript al diseño:
{% phrase_javascript %} -
Configura el editor en contexto para el proyecto con estas opciones:
PHRASE_ENABLED = TruePHRASE_PROJECT_ID = 'YOUR_PROJECT_ID'PHRASE_PREFIX = '{{__'PHRASE_SUFFIX = '__}}' -
Abre la aplicación en cualquier navegador web para ver el editor en contexto aplicado a la aplicación. Inicia sesión con cualquier usuario de la organización Phrase.
Código del adaptador de Django en GitHub
Ejemplo de código
Esta demo te muestra cómo integrar el editor en contexto con una aplicación de Django.
Nota
Es posible que esta biblioteca no funcione con IE11 o navegadores más antiguos. Añade Babel a la canalización de compilación si requieres compatibilidad con navegadores más antiguos.
Esta biblioteca hereda componentes comunes de los paquetes react-intl. Si tienes Phrase habilitado llamando a initializePhraseAppEditor, el comportamiento de los componentes cambiará.
Para instalar In-context Editor en este entorno, sigue estos pasos:
-
Instala el paquete a través de NPM:
npm install react-intl-phraseapp
O compila desde el código fuente:
npm run dist
npm install
-
Configurar
let config = { projectId: '<YOUR_PROJECT_ID>', phraseEnabled: true, prefix: "[[__", suffix: "__]]", fullReparse: true };El ID de un proyecto se encuentra en la configuración.
-
Añade el fragmento a la aplicación de React:
import {initializePhraseAppEditor} from 'react-intl-phraseapp' let config = { projectId: '<YOUR_PROJECT_ID>', phraseEnabled: true, prefix: "[[__", suffix: "__]]", fullReparse: true }; initializePhraseAppEditor(config); -
Busca todas las importaciones de
FormattedMessagey cambia la fuente dereact-intlareact-intl-phraseapp.import {FormattedMessage} from 'react-intl-phraseapp' -
Ejecuta las pruebas unitarias usando jest:
npm test
Ejemplo de código
Esta demo te muestra una integración del editor en contexto de Phrase con react-intl.
Para instalar In-context Editor en este entorno, sigue estos pasos:
-
Añade la gema
phraseapp-in-context-editor-rubyal entorno con el que quieres utilizar el editor en contexto:group :development do gem 'phraseapp-in-context-editor-ruby' end
E instálala ejecutando el comando bundle:
$ bundle install
-
Instala la gema
phraseapp-in-context-editor-rubyejecutando el generador de Rails:$ bundle exec rails generate phraseapp_in_context_editor:install --access-token=YOUR_ACCESS_TOKEN --project-id=YOUR_PROJECT_ID
Token de acceso
Crea y gestiona tokens de acceso en la configuración del perfil o mediante la API de autorizaciones.
project.id
El ID de un proyecto se encuentra en la configuración. Esto crea un archivo de inicialización con algunas opciones de configuración.
-
Agrega el fragmento de JavaScript al diseño de tu aplicación dentro de la etiqueta
<head>usando el helperphraseapp_in_context_editor_js:<head> { <%= phraseapp_in_context_editor_js %> { </head> -
Abra la aplicación en cualquier navegador web para ver el editor en contexto aplicado a la aplicación. Inicia sesión con cualquier usuario de la organización Phrase.
-
Desactiva Turbolinks (si se usa)
Turbolinks elimina todos los elementos de la interfaz del editor en contexto de la página en cada carga.
Agrega el atributo
data-no-turbolinka la etiqueta<body>:<body <%= PhraseApp::InContextEditor.enabled? ? "data-no-turbolink" : "" %>>
Ejemplo de código
Este demo te muestra una integración del editor en contexto de Phrase con react-i18next.
Primavera de 2025
Para instalar In-context Editor en este entorno, sigue estos pasos:
-
Asegúrate de que el paquete
com.phraseapp.incontexteditoresté disponible en la aplicación. -
Establece el ID de proyecto correcto y ajusta los demás parámetros en
PhraseAppConfiguration.class. -
Para renderizar todas las traducciones a través de Phrase, agrega el bean a la aplicación:
@Bean @Conditional(PhraseAppEnabledCondition.class) public MessageSource messageSource() { return new PhraseAppMessageSource(); } -
Proporciona el asistente de JavaScript requerido en las plantillas exponiendo el asistente como un bean:
@Bean public PhraseAppJavascriptHeader phraseAppJavascriptHeader() { return new PhraseAppJavascriptHeader(); } -
Agrega la etiqueta
<script>a tus plantillas dentro de la etiqueta<head>de cada página:<head> <script th:utext="${@phraseAppJavascriptHeader.getHeader()}"></script> </head> -
Reinicia la aplicación e inicia sesión con las credenciales de usuario de Phrase.
Código fuente de la aplicación de ejemplo en GitHub
Para instalar In-context Editor en este entorno, sigue estos pasos:
-
Crea un nuevo entorno en el que se ejecutará el editor In-Context. En el ejemplo, el nuevo entorno se llama
translation.Crea un nuevo archivo de configuración:
# app/config/config_translation.yml imports: - { resource: config.yml } parameters: translator.class: Acme\YourBundle\Translation\PhraseTranslator -
Crea un controlador para hacer que el entorno sea accesible desde el 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(); -
Sobrescribe el método de traducción estándar para exponer los nombres de las claves al 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; } } } -
Agrega el fragmento de JavaScript al diseño:
# Acme/YourBundle/Resources/views/layout.html.twig
-
Abre la aplicación en cualquier navegador web para ver el editor en contexto aplicado a la aplicación. Inicia sesión con cualquier usuario de la organización Phrase.
Para instalar In-context Editor en este entorno, sigue estos pasos:
-
Crea un nuevo entorno en el que se ejecutará el editor In-Context. En el ejemplo, el nuevo entorno se llama
translation.Crea un nuevo archivo de configuración:
# app/config/config_translation.yml imports: - { resource: config.yml } -
Crea un controlador para hacer que el entorno sea accesible desde el 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); -
Sobrescribe el método de traducción estándar para exponer los nombres de las claves al 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; } } -
Asegúrate de que la clase siempre se sobrescriba cuando el paquete se utilice con un pase de compilador:
# 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'); } } -
Si utilizas pases de compilador independientes, regístralos en el método build() de la clase del paquete:
# 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()); }; } } -
Agrega el fragmento de JavaScript al diseño:
# src/YourBundle/Resources/views/layout.html.twig
-
Abre la aplicación en cualquier navegador web para ver el editor en contexto aplicado a la aplicación. Inicia sesión con cualquier usuario de la organización Phrase.
Nota
Vue I18n Phrase In-Context Editor es compatible con todas las versiones de Vue I18n 8.17.5 y posteriores. Esta biblioteca podría funcionar con versiones anteriores, pero no tienen soporte oficial y no recibirán actualizaciones específicas ni correcciones de errores.
Para instalar In-context Editor en este entorno, sigue estos pasos:
-
Instala el paquete con tu gestor de paquetes preferido:
# yarn yarn add vue-i18n-phrase-in-context-editor # npm npm install vue-i18n-phrase-in-context-editor
o cárgalo con CDN (regístralo 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 (muestra):
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 la biblioteca:
El In-Context Editor admite Ajax y manipulación del DOM (es decir, mediante JavaScript) utilizando observadores de mutación.
El modo Ajax puede causar problemas en algunos casos y puede provocar graves problemas de rendimiento al utilizar el In-Context editor. Para desactivar el modo Ajax, añade el siguiente valor de configuración antes del fragmento de JavaScript:
window.PHRASEAPP_CONFIG = {
ajaxObserver: false
}
Para habilitar el modo de depuración, añade el siguiente valor de configuración antes del fragmento de JavaScript:
window.PHRASEAPP_CONFIG = {
debugMode: true
}
Para establecer una configuración regional específica explícitamente al iniciar el editor en contexto, utiliza el ajuste forceLocale. Esto es útil para preseleccionar en el editor en contexto la configuración regional que se muestra actualmente en tu aplicación web:
window.PHRASEAPP_CONFIG = {
forceLocale: "pt-BR"
}
Esta configuración solo está disponible cuando se utiliza la gema phraseapp-in-context-editor-ruby.
Las claves pueden excluirse de la representación con el editor en contexto. Al trabajar con Rails, las claves pueden ignorarse para datos como mensajes de error o claves de formato de fecha y hora. Para excluir claves de ser manejadas automáticamente por la gema phraseapp-in-context-editor-ruby, añade una matriz de las claves al archivo de inicialización phraseapp_in_context_editor.rb. También se pueden usar comodines:
PhraseApp::InContextEditor.configure do |config| config.ignored_keys = ["date.*", "forbidden.key", "errors.messages*"] end
Las claves que coincidan con cualquiera de estos patrones no serán accesibles para el editor en contexto y se mostrarán normalmente.