Невозможно использовать gettext для получения переведенной строки в файлах .mo - PullRequest
0 голосов
/ 15 ноября 2018

Я пытаюсь настроить чистую среду для тестирования gettext с php.Я разобрался с одним из примеров и начал там, но не смог заставить его работать: https://github.com/yookoala/gettext-example

(При необходимости, пожалуйста, клонируйте исходный код и протестируйте себя)

Основная частьскрипт PHP:

<?php
// set locale to either first argument or the $_GET['locale']
$localeToSet = $argv[1] ?? $_GET['locale'] ?? 'zh_HK.utf8';
if (($locale = setlocale(LC_ALL, [
    $localeToSet,
    "$localeToSet.utf8",
    "$localeToSet.utf-8",
    "$localeToSet.UTF8",
    "$localeToSet.UTF-8",
])) === false) {
    throw new Exception($localeToSet . ' is not supported in this system');
}

bindtextdomain('messages', 'locale');

textdomain('messages');

printf("locale: %s - \n", $locale);
printf(_("Hello, %s, it is nice to see you today.\n"), "Vic");

Файл locale/zh_HK/LC_MESSAGES/messages.po:

# SOME DESCRIPTIVE TITLE.
# Copyright (C) YEAR Codegroove.net
# This file is distributed under the same license as the PACKAGE package.
# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
#
#, fuzzy
msgid   ""
msgstr  "Project-Id-Version: Codegroove.net Example Translations 0.0.1\n"
        "Report-Msgid-Bugs-To: vmc@codegroove.net\n"
        "POT-Creation-Date: 2010-05-28 06:18-0500\n"
        "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
        "Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
        "Language-Team: LANGUAGE <LL@li.org>\n"
        "MIME-Version: 1.0\n"
        "Content-Type: text/plain; charset=UTF-8\n"
        "Content-Transfer-Encoding: 8bit\n"

#, php-format
msgid   "Hello, %s, it is nice to see you today.\n"
msgstr "你好,%s,很高興今日與你會面。\n"

И на тестовом сервере CLI, и на PHP не удалось отобразить переведенный текст (как это должно быть).Это просто показывает необработанное сообщение.

Кто-нибудь здесь имеет представление, что не так с моей настройкой?Или как я могу отследить проблему?

1 Ответ

0 голосов
/ 26 ноября 2018

Существует также версия gettext для командной строки. Попробуйте это:

TEXTDOMAIN=messages TEXTDOMAINDIR=locale LC_ALL=zh_HK.UTF-8 gettext 'Hello, %s, it is nice to see you today.
>'

Вместо новой строки необходимо нажать клавишу ВВОД, а затем добавить заключительную кавычку. > исходит из вашей оболочки.

Это работает? Тогда вы знаете, что проблема заключается в вашем коде. И если это не работает, проблема в вашей настройке, вашей локальной среде. Попробуйте посмотреть, какие каталоги и файлы рассматриваются gettext, например, с strace или около того.

Другие возможные ошибки:

  1. Перевод извлекается из файла mo, а не из файла po. Это существует? Попробуйте msgunfmt locale/zh_HK/LC_MESSAGES/messages.mo.
  2. Попробуйте указать абсолютный путь для каталога локали с помощью bindtextdomain('messages', '/path/to/locale');
  3. Вы используете Windows?

Какая локаль на самом деле используется? Вы не опубликовали вывод своего скрипта.

...