В конце дня переводчик должен иметь возможность сесть и изменить тексты для каждого языка (чтобы они соответствовали по смыслу) без необходимости привлекать программиста, который уже выполнил свою работу.
Это заставляет меня чувствовать, что правильный ответ - использовать модифицированную версию gettext
, где вы помещаете строки, подобные этой
_(id, backup_text, context)
_('ABOUT_ME', 'About Me', 'HOMEPAGE')
контекст необязательный
почему так?
потому что вам нужно идентифицировать текст в системе с помощью уникального идентификатора, а не текста на английском языке, который может быть повторен в другом месте.
Вы также должны хранить резервную копию, идентификатор и контекст в одном и том же месте вашего кода, чтобы уменьшить расхождения.
Идентификаторы также должны быть читаемыми, что приводит к проблеме использования синонимов и дубликатов (даже в качестве идентификаторов), мы могли бы добавить префикс идентификаторов, например, «HOMEPAGE_ABOUT_ME» или «MAIL_LETTER», но
- люди забывают сделать это в начале, а изменить его позже - проблема
- более гибкая система, позволяющая системе группировать по идентификатору и контексту
, поэтому я также добавил контекстную переменную в конце
текст резервной копии может быть почти любым, даже может быть "[ABOUT_ME @ HOMEPAGE text не удалось загрузить, пожалуйста, свяжитесь с example@example.com]"
Он не будет работать с текущими программами редактирования gettext, такими как "poedit", но я думаю, что вы можете определить собственные имена переменных для переводов, например просто "t ()" без подчеркивания в начале.
Я знаю, что gettext также поддерживает контексты, но он не очень хорошо документирован или широко используется.
P.S. Я не уверен насчет наилучшего порядка переменных для обеспечения хорошего и расширяемого кода, поэтому предложения приветствуются.