Javascript и переводы - PullRequest
       27

Javascript и переводы

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

У меня есть PHP-приложение, которое широко использует Javascript на стороне клиента. У меня есть простая система на стороне PHP для обеспечения переводчиков простым способом предоставления новых языков. Но в некоторых случаях javascript должен отображать языковые элементы для пользователя (может быть, кнопка «ОК» или «Отмена», «загрузка» или что-то в этом роде).

В PHP у меня просто есть текстовый файл, который кэшируется на стороне сервера, и содержит коды фраз с одной стороны и их перевод с другой. Переводчик просто должен заменить английский на свой собственный язык и выслать мне переведенную версию, которую я интегрирую в приложение.

Я хочу что-то подобное на стороне клиента. Мне пришло в голову включить javascript include, который представляет собой просто набор переведенных констант, но затем при каждой загрузке страницы загружается потенциально большой файл, большая часть которого не нужна.

Кто-нибудь имел дело с этим? Если да, то каково было ваше решение?

РЕДАКТИРОВАТЬ : Для ясности, я не имею в виду переводы "на лету" здесь. Переводы уже подготовлены и готовы к работе, мне просто нужно, чтобы они были доступны клиенту эффективным способом.

Ответы [ 5 ]

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

Как насчет подачи javascript из php? Так что вместо вздымания:

  <script type='text/javascript' src='jsscript.js'></script>

сделать

 <script type='text/javascript' src='jsscript.php'></script>

А затем в файле php замените весь выведенный текст на связанные с ним константы.

Обязательно выводите правильные заголовки кэширования из кода PHP.

EDIT

Вот заголовки, которые я использую:

header('Content-type: text/javascript');
header('Cache-Control: public');
header('expires: '. date("r", time() + ( 7 * 24 * 60 * 60 ) ) ); // 1 week
header("Pragma: public");
2 голосов
/ 04 января 2009

Обычно я загружаю соответствующие языковые значения в виде объекта JavaScript в отдельный файл, на который может ссылаться остальная часть моего кода:

var messages = {
    "loading": "Chargement"
}

alert(messages.loading);

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

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

То, что вы ищете, похоже AJAX (клиент и сервер обмениваются асинхронными запросами с использованием Javascript).

Если вы ищете что-то готовое, наберите API-интерфейсы AJAX для перевода Google .

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

Мне нравится ответ Пим Джагер, и я сделал это сам. Если вы не хотите, чтобы PHP генерировал для вас JavaScript (скажем, по соображениям производительности), вы можете получить мастер-копию библиотек JavaScript, а когда они изменятся, запустить программу перевода, чтобы сгенерировать версию каждой библиотеки. для каждого языка. Затем просто поместите PHP верную версию для текущего пользователя в тег скрипта, который он отправляет.

Я работал над системой, в которой требовались как тяжелая локализация, так и интенсивный брендинг для разных клиентов. Все, что мы делали, было отправлено на экран с уникальным макросом, например [ 3027 ] (или что-то в этом роде). Затем у нас была куча файлов локали и брендинга, в которых были записи для каждого кода макроса и текст для замены каждого макроса. Программа будет перебирать все исходные файлы и все языки и делать замены.

Мы обнаружили, что нам также необходимы некоторые функции для локализации, для денежных сумм, дат, времени и т. Д. Все это работает довольно хорошо.

Мы обнаружили, что нам нужна еще одна важная вещь: инструмент, чтобы просмотреть все языковые файлы и убедиться, что у них всех есть все необходимые коды. Большая экономия времени.

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

Мне никогда не приходилось делать это лично, но мое первое предположение - ссылаться на стороннюю библиотеку. Я полагаю, что Google AJAX API может иметь только инструмент для этого, и, поскольку библиотека находится через Google, файл javascript не будет загружен с вашего сайта.

Попробуйте немного покопаться на следующем сайте: http://code.google.com/apis/ajaxlanguage/documentation/

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

Удачи, C

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...