Как перевести строки в JS - PullRequest
4 голосов
/ 10 января 2009

У меня есть проект, который я хочу перевести на несколько языков для части PHP. Я использую Zend Frameworks Zend_Translate с GetText. Теперь я тоже хочу перевести часть JS.

Я использую jQuery JS Framework и хотел бы услышать ваши мысли по поводу перевода файлов JS

Ответы [ 7 ]

12 голосов
/ 10 января 2009

Я успешно использовал GetText для перевода файлов JavaScript в трех проектах.

Конечно, GetText изначально не поддерживает JavaScript, а JavaScript также не поддерживает GetText. Мое решение было следующим.

  • В JavaScript я окружаю переводимые строки gettext("your text here").
  • Затем у меня есть скрипт, который извлекает строки из файлов JavaScript и создает файл C, потому что C поддерживается gettext.
  • Затем я использую xgettext для сгенерированных файлов C и любых других файлов в моем проекте для создания файлов POT и PO.

После перевода PO-файлов мне нужно вернуть переводы на JavaScript ...

  • Я снова анализирую файлы JavaScript, вспоминая список переводимых строк, а затем для каждой локали:
  • Используя язык с поддержкой GetText (в моем случае PHP), я переводил все строки и выводил файл JavaScript.

Например, файл локали для эстонского языка (например, et_EE.js) может выглядеть следующим образом:

var LOCALE = {
  "Hello": "Tere",
  "My name is %s": "Minu nimi on %s",
  "Enter your credit card number": "Sisesta oma krediitkaardi number"
};

function gettext(string) {
  return LOCALE[string] ? LOCALE[string] : string;
}

В зависимости от выбранной локали вы можете указать et_EE.js или en_US.js или ...

en_US.js, вероятно, будет содержать только следующее:

function gettext(string) {
  return string;
}

Немного сложнее для ngettext(), но вы должны понять общую идею.

Самое замечательное, что я могу использовать все доступные инструменты gettext. Особенно, когда у меня есть переводимые тексты как на PHP, так и на JavaScript - я могу использовать один и тот же инструмент для их перевода, а также гарантировать, что одна и та же строка будет переведена одинаково и в JavaScript, и в PHP.

ПРИМЕЧАНИЕ: Если вы не имеете дело с веб-приложением, интенсивно использующим JavaScript, вам следует дважды подумать, прежде чем создавать содержимое страницы, созданное с помощью JavaScript.

2 голосов
/ 11 января 2009

Это также может вас заинтересовать: плагин gettext для jQuery .

2 голосов
/ 11 января 2009
1 голос
/ 11 января 2009

Ну, вы могли бы расширить строки, чтобы дать им переведенную функцию, которая ищет получателя в локали.

Вы бы использовали это так:

alert («Ваш любимый язык - английский!». Translation ());

И вам будет выдано предупреждение с "tu idiom prefiero es Espanol" или чем-то еще

Niko

0 голосов
/ 11 апреля 2015
// just for some idea 
//var language ="fr_FR";
var language ="sp_SP";

var FRLOCALE = {
  "Hello": "bonjure ",
  "My name is %s": "mo nome oc ",
  "what": "some french thing"
};

var SPLOCALE = {
  "Hello": "Spanish for hello",
  "My name is %s": "spanish for my name is ",
  "what": "qu"
};

function translated(language, string){
    if (language.indexOf("fr") > -1) {
        return FRLOCALE[string] ? FRLOCALE[string] : string;
    } 

    if (language.indexOf("sp") > -1) {
      return SPLOCALE[string] ? SPLOCALE[string] : string;
    }

    return string; 
}

alert(translated(language,"Hello"));

alert(translated(language,"some thing not translated "));
0 голосов
/ 12 января 2009

У меня есть веб-страница PHP, которая также существует на нескольких языках. Я написал свой собственный языковой класс на PHP, и когда дело дошло до локализации файлов JavaScript, я просто настроил сервер для выполнения файлов .js также как PHP, и я использовал свой класс PHP для перевода строк JavaScript.

Примерно так:

alert ( '<?php echo $l->Get ( 'MyString' ); ?>' );

Я просто включаю файл, который инициализирует "$ l" в начале каждого файла JavaScript. У меня нет проблем с этим.

0 голосов
/ 10 января 2009

http://plugins.jquery.com/project/jquery-localize нашел это, которое используется и letmegooglethatforyou.com также нашел это http://plugins.jquery.com/project/l10n какой из них лучше?

...