Po.js — Супер Простая Утилита Для I18N

Когда я разрабатываю системы на 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.

  
  
  
   

<script src="po.min.js"></script> <script> pojs.init('/ru.json'); </script>

Если текущий язык является языком по умолчанию, то передавать ссылку на JSON не нужно.

Все переводы возвращаются после вызова функции и передачи ей ключа.

Если ключ не найден, будет возвращен сам ключ.



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 (да, это такая старая школа).

po.js на GitHub п.

с.

Написал чисто для себя, возможно вам чего-то не хватает или что-то работает не корректно.

Готов редактировать, улучшать! Теги: #JavaScript #gettext #i18n #JavaScript

Вместе с данным постом часто просматривают:

Автор Статьи


Зарегистрирован: 2019-12-10 15:07:06
Баллов опыта: 0
Всего постов на сайте: 0
Всего комментарий на сайте: 0
Dima Manisha

Dima Manisha

Эксперт Wmlog. Профессиональный веб-мастер, SEO-специалист, дизайнер, маркетолог и интернет-предприниматель.