D8 Translate Modules - pierregermain/MyDrupal GitHub Wiki

Consideraciones

  • 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

Función t()

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']
  ]);

Tipos de variables de sustitución posibles:

  • @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

Formateador plural

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');

Ficheros de traducción

  • Software: PoEdit

Ficheros .po

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.

Archivos de plantilla de traducción .pot

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

Traducción de módulos contribuidos

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

Módulo potx

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.

Meter traducciones en nuestro módulo

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

Editor PoEdit

http://www.poedit.net/

Actualizar traducciones para un módulo

$ drush locale-update

Tablas de traducción

locales_location
locales_source
locales_target

Traducciones fuera del código PHP

Ficheros yml

  • Se traducen desde la UI

Ficheros twig

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 %}

Annotations

Usamos @Translation

/**
* Provides a block to display the page title.
*
* @Block(
* id = "page_title_block",
* admin_label = @Translation("Page title"),
* )
*/

Traducción en archivos de configuración

  • Se traduce desde la UI
⚠️ **GitHub.com Fallback** ⚠️