Я создаю продукт с открытым исходным кодом, и я думаю о локализации, я читал о gettext, но, похоже, есть много проблем, чтобы заставить его работать в разных системах (серверы, os и т. Д.).
Как бы вы справились с этим? Есть ли безопасный способ помочь gettext работать в нескольких системах? Может, это уже есть?
Привет из Швеции / Тобиаса
Я рекомендую вам взглянуть на Zend_translate , Zend_locale и Zend_Date . Я только начинаю баловать себя, но для меня они уже кажутся действительно хорошим, чистым и современным решением интернационализации, в отличие от хаоса, который является gettext.
Введение в Zend_translate содержит ряд сильных аргументов, почему нужно выбирать (или что-то подобное) над gettext.
В многоязычных приложениях контент должен быть переведен на несколько языков и отображать контент в зависимости от языка пользователя. PHP предлагает уже несколько способов решения таких проблем, однако решение PHP имеет некоторые проблемы:
Несогласованный API: для разных исходных форматов нет единого API. Например, использование gettext очень сложно.
PHP поддерживает только gettext и собственный массив: сам PHP предлагает только поддержку массива или gettext. Все остальные исходные форматы должны быть закодированы вручную, потому что нет встроенной поддержки.
Отсутствие языка по умолчанию: язык по умолчанию пользователя не может быть обнаружен без глубокого знания фона для разных веб-браузеров.
Gettext не является потокобезопасным: библиотека gettext PHP не является потокобезопасной, и ее нельзя использовать в многопоточной среде. Это связано с проблемами с самим gettext, а не с PHP, но это уже проблема.
Zend_Translate Zend Framework является наиболее гибким, что я видел. Для него необязательно нужен модуль поддержки gettext на стороне PHP, когда он сам читает формат .mo-binary.
Блоки языков должны храниться вне программы. Они могут быть в базе данных или в файлах XML. Это позволит добавить дополнительные языки в более поздний момент времени.
Тогда все ваше приложение должно сделать, это определить локализацию пользователя и подать соответствующий текст для каждой ситуации.