D8 Translate Modules - pierregermain/MyDrupal GitHub Wiki
- Consideraciones
- Ficheros de traducción
- Módulo potx
- Meter traducciones en nuestro módulo
- Editor PoEdit
- Actualizar traducciones para un módulo
- Tablas de traducción
- Traducciones fuera del código PHP
- En drupal el idioma base es el inglés: Siempre escribir la interfaz en inglés y luego traducirlo (aunque no vayas a realizar un sitio multilingue)
- https://www.drupal.org/developing/api/8/localization
- módulos a ser habilitados del núcleo
- Language
- Interface Translation
- t() sigue estando disponible, la utilizaremos únicamente cuando no exista una alternativa basada en POO (por ejemplo en hooks).
- API: https://api.drupal.org/api/drupal/core!includes!bootstrap.inc/function/t/8
- se recomienda el uso del método $this->t() cuando esté disponible en lugar de t()
- El método t() es proporcionado por el Trait StringTranslationTrait
use Drupal\Core\StringTranslation\StringTranslationTrait;
class MyClass {
use StringTranslationTrait;
public function doSth() {
// ...
$string = $this->t('Something');
// ...
}
}
Paso de parámetros:
Ejemplo 1:
$this->t('The content has been viewed %count times', ['%count' => $count]);
Ejemplo 2:
$context['message'] = $this->t('Synchronizing configuration: @op @name in @collection.',
[
'@op' => $operation['op'],
'@name' => $operation['name'],
'@collection' => $operation['collection']
]);
- @variable. La cadena será "limpiada" a código HTML
- %variable. Devuelve el texto entre etiquetas
- :variable. Realiza más limpieza aún. Se usa cuando se sustituye una URL.
Más info en:
https://api.drupal.org/api/drupal/core!lib!Drupal!Component!Render!FormattableMarkup.php/function/FormattableMarkup::placeholderFormat/8 https://api.drupal.org/api/drupal/core!lib!Drupal!Component!Utility!Html.php/function/Html::escape/8 https://api.drupal.org/api/drupal/core!lib!Drupal!Component!Utility!UrlHelper.php/function/UrlHelper::stripDangerousProtocols/8
Si queremos usar el plural, en vez de usar $this->t() usaremos $this->formatPlural().
En código no POO usaremos:
\Drupal::translation()->formatPlural($statistics['totalcount'],
'1 view', '@count views');
- Software: PoEdit
Un archivo con extensión .po está constituido por una cabecera con una serie de metadatos y a continuación las cadenas traducidas.
- El msgid contiene la cadena original.
- El parámetro msgstr que contiene la cadena traducida al idioma que corresponde el archivo.
Los archivos .pot se utilizan como plantilla de los archivos de traducción .po. Su estructura es similar, pero dejando las cadenas de traducción vacías
Drupal permite importar automáticamente las traducciones de los módulos contribudios desde localize.drupal.org. Los archivos descargados se almacenan con el nombre del módulo y versión en public://translations
Sirve para extraer todas las cadenas a ser traducidas de nuestro módulo
https://www.drupal.org/project/potx
Para instalar:
$ composer require kgaut/potx
$ drush en potx
Para extraer cadenas:
$ drush potx single --modules=mymodule --api=8
Para extraer cadenas en un idioma concreto:
drush potx single --modules=mymodule --api=8 --language=es
Estos comandos nos generan el fichero general.pot
en la carpeta raiz de drupal.
Estos ficheros podremos moverlos a nuestro módulo para que cuando se instalen las traducciones.
Se hace desde el fichero info.yml
interface translation project: mymodule
interface translation server pattern: modules/custom/mymodule/translations/%project.%language.po
Patrones que se pueden usar:
%core. Versión del núcleo.
%project. Nombre del módulo.
%version. Versión del módulo.
%language. Código de idioma.
Los ficheros tendrán este formato:
mymodule.es.po
mymodule.de.po
$ drush locale-update
locales_location
locales_source
locales_target
- Se traducen desde la UI
Simples:
<h2>{{ 'Book traversal links for'|t }} {{ book_title }}</h2>
Con reemplazo:
{% trans %}
Submitted by {{ author_name }} on {{ date }}
{% endtrans %}
Con plural:
<div>
{% set count = 1 %}
{% trans %}
Found 1 item.
{% plural count %}
Found {{ count }} items.
{% endtrans %}
</div>
Sin filtrar hacia HTML:
{% trans %}
Escaped: {{ string }}
{% endtrans %}
{% trans %}
Raw: {{ string|raw }}
{% endtrans %}
Usamos @Translation
/**
* Provides a block to display the page title.
*
* @Block(
* id = "page_title_block",
* admin_label = @Translation("Page title"),
* )
*/
- Se traduce desde la UI