2009-05-28 3 views
0

У меня есть веб-приложение, которое использует TONS javascript, и, как обычно, есть много текстовых констант, которые будут отображаться пользователю, встроенному в сам код.Как сделать локализуемый javascript?

Как вы думаете, что это лучший способ сделать это локализуемым?
Я знаю, что мне нужно снять эти строки с кода и заменить их на константы, которые будут определены в каком-то внешнем месте.

Для серверной части ASP.Net предоставляет некоторые очень аккуратные возможности для решения этой проблемы.
Что лучше всего сделать в Javascript?

Лучшая идея, которую я имею, это иметь JS-файл со всеми строковыми константами JS сайта (у меня бы были разные копии этого для каждого языка), а затем на каждой странице я включаю это сначала скрипт, прежде чем все остальные.
Это похоже на самый централизованный способ, который также снижает минимальную пропускную способность.

Есть ли другие лучшие подходы?

Спасибо!

+1

Я локализовал действительно большой сайт с точным методом, упомянутым выше, и он работает хорошо. Легко обновляется, все сводится к кешированию и т. Д. Мне так же интересно, как и вы, чтобы увидеть, есть ли лучший подход. – ajm

+0

Я не понимаю, как «многоязычный» был заменен на «локализованный». Похоже, что маркетолог использовал свою машину альтернативного словаря для гибкости приговора, чтобы максимизировать синхронизацию. – Kieveli

ответ

2

вот как мы это сделали (в ASP.net), в значительной степени в соответствии с тем, что вы упоминали: 1) Созданы два файла javascript: один, который определяет все функции javascript/DOM-манипуляции в соответствии с требованиями сайта , а вторая называется Messages.js: это определяет все строковые литералы, которые должны быть локализованы, например var ALERT_MSG = «Alert message in english».

2) Создана другая версия Messages.js, по одной для каждой локали, которую мы поддерживаем и локализуем строки. Локализованные js-файлы были названы с использованием соглашения об именах messages.locale.js (например, messages.fr-FR.js).

3) Включил js-файлы в «ScriptManager» и предоставил ResourceUICultures для файла Messages.js: это гарантирует, что корректный локализованный файл встроен в выход html (если вы не используете ASP.net вы можете создать эту базовую функциональность, совершив некоторое обнюхивание культуры и включив соответствующий js-файл).

4) Voila!

1

Ваш подход звучит достаточно хорошо.

Если у вас много строк, и вас беспокоит объемность файла, вы можете захотеть рассмотреть сценарий, который создает один файл javascript для каждого языка, объединив javascript кода и javascript локали, а затем применив что-то вроде Minify.

Вы будете тратить несколько циклов процессора на публикации, но вы сэкономите несколько обходов ...

+0

Интересно. Я уже делаю конкатенирование/минирование JS-файлов, так что это имеет смысл. –

2

Ваш подход имеет смысл. Детали:

У меня были бы строки для каждого языка в объекте.

localized = {"cat": "chat", "dog": "chien"};

Затем в коде:

локализовано [ «кошка»]

Котировки вокруг клавиша и обозначение массива (а не более общего объект точечной нотации), чтобы избежать столкновений с JavaScript зарезервированных слов ,

+0

Основная проблема заключается в том, что если вы дадите «ресурсный» файл, в этом формате, который вы упомянули, переводчику, вы ГАРАНТИРОВАНЫ, чтобы получить что-то обратно, что приведет к синтаксической ошибке. var strCat = "chat"; не намного лучше, но, по крайней мере, легче найти ошибку и более простой синтаксис для понимания переводчиком. Мне нравится, как вы их обертываете в пространстве имен, однако, я посмотрю, смогу ли я найти что-то с «лучшим из обоих миров». –

+1

Переводчику никогда не нужно видеть JSON. Вы можете конвертировать из файла данных в JSON. – Nosredna

+0

Да, вот как мы это сделали. Все переведенные сообщения хранятся в объекте с пространством имен. labels = {errorMessage: "foo", confirmMessage: "bar"} – ajm

0

Там есть библиотека для локализации приложений JavaScript: https://github.com/wikimedia/jquery.i18n

Строки хранятся в формате JSON файлов, так как в значительной степени все еще предполагает, но у него есть еще несколько особенностей:

Это может сделать замену параметра, поддерживает пол (умение обрабатывать), количество (умное множественное обращение, включая языки, которые имеют более одной множественной формы) и пользовательские правила грамматики, которые необходимы некоторым языкам.

Единственное требование - jQuery.

Смежные вопросы