http://ift.tt/1oMfgws (Prototype)
angular-gettext.rocketeer.be/ (Angular)
http://ift.tt/1oMfjIy (jQuery)
А хотелось иметь именно «pure-js» решение. Ок, напишем своё.
Первым делом я искал, как же в JS прочитать PO-файлы. Можно парсить, но это лишняя нагрузка, поэтому я решил не насиловать 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.7KB
2. Не нуждается в сторонних зависимостях, таких как jQuery, Prototype, Angular …
3. JSON кэшируется в localStorage. Поэтому будьте осторожны, если у вас очень большие файлы переводов. Сбросить кэш можно просто добавив "?1" к ссылке на JSON-файл (да, вот такой old school)
This entry passed through the Full-Text RSS service — if this is your content and you're reading it on someone else's site, please read the FAQ at http://ift.tt/jcXqJW.
Комментариев нет:
Отправить комментарий