Когда я разрабатываю системы на Zend Framework, я всегда использую gettext и Zend_Translate. Все предельно просто и обычно проблем с переводом даже крупных проектов не возникает. Для каждого языка генерируются свои файлы .
po и .
mo, переводы основаны на языке по умолчанию, ключи тоже на этом же языке.
Переводчикам удобно сдавать эти файлы, которые они могут открыть в POEdit и удобно всё перевести.
Итак, на стороне сервера все очень просто, но зачастую вам нужно «на лету» перевести некоторые сообщения в JavaScript, а он не понимает ваши .
mo файлы.
Но мне хотелось бы их использовать, чтобы не делить перевод одного проекта на 2 части (бэкенд, фронтенд).
И я начал искать.
Таких решений в интернете достаточно большое количество, но все они почему-то обрастают зависимостями: code.google.com/p/gettext-js (Опытный образец) angular-gettext.rocketeer.be (Угловой) github.com/jakob-stoeck/jquery-gettext (jQuery) Но мне хотелось иметь решение на «чистом JS».
Хорошо, давайте напишем свой.
Первое, что я искал, это как читать PO-файлы в JS. Парсить можно, но это лишняя нагрузка, поэтому я решил не форсировать JavaScript и дать готовый JSON. Поэтому первое, что нам нужно сделать, это преобразовать PO в JSON. Я советую вам использовать с этим конвертером .
Далее алгоритм прост: сохраняем JSON-файл на свой сервер и передаем ссылку на него в pojs. Конечно, предварительно подключив к странице po.min.js.
Если текущий язык является языком по умолчанию, то передавать ссылку на JSON не нужно.<script src="po.min.js"></script> <script> pojs.init('/ru.json'); </script>
Все переводы возвращаются после вызова функции и передачи ей ключа.
Если ключ не найден, будет возвращен сам ключ.
pojs._('Hello world');
Также в po.js есть еще одна супермини-фича, немного похожая на sprintf. pojs._('My name is %s, and I am %s years old', ['Sasha', 24]);
Если JSON не кэширован, то он будет получен асинхронно, а это значит, что мы не сможем использовать pojs._() сразу после инициализации.
Оберните код, в котором используются переводы: pojs.ready(function() {
pojs._('Hello world');
});
Стоит отметить некоторые преимущества po.js, иначе не было бы смысла все это делать:
1. Нано-размер: ~ 0,7 КБ.
2. Не нужны сторонние зависимости, такие как jQuery, Prototype, Angular. 3. JSON кэшируется в localStorage. Поэтому будьте осторожны, если у вас очень большие файлы перевода.
Вы можете сбросить кеш, просто добавив «?1» к ссылке на файл JSON (да, это такая старая школа).
с.
Написал чисто для себя, возможно вам чего-то не хватает или что-то работает не корректно.
Готов редактировать, улучшать! Теги: #JavaScript #gettext #i18n #JavaScript
-
Чего Ожидать От Seo-Услуг Bigcommerce
19 Oct, 24 -
Microsoft Наносит Удар По Шпионскому По!
19 Oct, 24 -
Обзор Вместо 1.2.0
19 Oct, 24 -
Microsoft Раздает Подарки На Новый Год?
19 Oct, 24 -
День Загрузки 2008
19 Oct, 24 -
Мой Тудушник
19 Oct, 24