2010-08-01 59 views
5

¿Hay algún mecanismo en yii framework para traducir mensajes en archivos fuente de JavaScript?Cómo lidiar con la internacionalización de JavaScript

Por ejemplo, con:

yiic message config-message.php 

puedo generar archivos de traducción para todos .php Yii :: t().

Es posible generar archivos .js con el mismo mecanismo. Actualmente estoy incluyendo mis datos de javascript json con la tabla devuelta por el archivo de traducción.

Respuesta

1

No hay una forma específica de tratar este problema.

Puede, por ejemplo, generar un archivo con una matriz con 'id-mensaje' => 'traducción' e incluir el correcto y luego hacer cosas como alerta ($ mensajes ['itemDeleted']) o algo.

Una alternativa podría ser hacer vistas de su javascript y usar la función Yii :: t() en él.

2

Es realmente un problema. Los sitios de idiomas múltiples siempre son un problema. YII resuelve el problema para el código php. Pero el problema del código js sigue en su lugar.

No tengo una solución muy elegante pero funciona. Cree el controlador/componente y genere el código js con localización sobre la marcha usando t(). ?

obtener/archivo/js/= alguna-js-archivo en la disposición:

Por supuesto, cada JS tiene por qué ser reescritura. Si uso pequeños trozos de código (cs() -> RegisterScript) también uso t().

4

Una solución alternativa sería hacer Yu incluyen mensajes traducidos en el DOM, que serán posteriormente acceder por su código JS, así:

  1. No es necesario repetir código JS.
  2. La traducción está centralizada en el framework PHP/Yii.
2

Acabo de tropezar con este problema y el uso de un controlador para generar el código js sobre la marcha no es una opción porque perderá recursos debido a que comienza un proceso PHP adicional en cada solicitud. Esto puede ser un problema en sitios de alto tráfico. Así que implementé un enfoque diferente: En el .js los mensajes se almacenan en Variables, p.

var MyJsClass = { 
    lang: 
    { 
     foo: 'Foo', 
     bar: 'Bar', 
    }, 
    doSomething: function() 
    { 
     console.log(this.lang.foo); 
    }, 
}; 

en la vista se agrega la traducción si el idioma actual es diferente a la sourceLanguage de la App:

<?php 
$cs = Yii::app()->clientScript; 
$cs->registerScriptFile($this->module->assetsUrl.'/js/myjsclass.js'); 
if (Yii::app()->sourceLanguage != Yii::app()->language) { 
    $cs->registerScript('MyScriptID', ' 
     MyJsClass.lang.foo = \''.Yii::t('TranslationCategory', 'Translated Foo').'\'; 
     MyJsClass.lang.bar = \''.Yii::t('TranslationCategory', 'Translated Bar').'\'; 
    '); 
} 
?> 
Cuestiones relacionadas