1

gettext翻訳用のライブラリを1つ追加しました。対応するpoファイルとmoファイルを追加しました。

そして、翻訳はうまく機能しています。

poファイルを更新するときに、翻訳を変更します。その後、ページをリロードすると、新しい翻訳ではなく、古い翻訳が取得されます。

ライブラリコードは次のとおりです。

/**
 * This method overides the original load method. Its duty is loading the domain files by config or by default internal settings.
 *
 */
function load_gettext($userlang = false) {

    /* I want the super object */
    if ($userlang)
        $this->gettext_language = $userlang;
    else
        $this->gettext_language = 'it_IT';
    log_message('debug', 'Gettext Class gettext_language was set by parameter:' . $this->gettext_language);

    putenv("LANG=$this->gettext_language");
    setlocale(LC_ALL, $this->gettext_language);

    /* Let's set the path of .po files */
    $this->gettext_path = APPPATH . 'language/locale';
    log_message('debug', 'Gettext Class path chosen is: ' . $this->gettext_path);

    bindtextdomain($this->gettext_domain, $this->gettext_path);
    textdomain($this->gettext_domain);
    log_message('debug', 'Gettext Class the domain chosen is: ' . $this->gettext_domain);
    return true;
}

/**
 *  Plural forms added by Tchinkatchuk
 *  http://www.codeigniter.com/forums/viewthread/2168/
 */

/**
 * The translator method
 *
 * @param string $original the original string to translate
 * @param array $aParams the plural parameters
 * @return the string translated
 */
function _trans($original, $aParams = false) {
    if (isset($aParams['plural']) && isset($aParams['count'])) {
        $sTranslate = ngettext($original, $aParams['plural'], $aParams['count']);
        $sTranslate = $this->replaceDynamically($sTranslate, $aParams);
    } else {
        $sTranslate = gettext($original);
        if (is_array($aParams) && count($aParams))
            $sTranslate = $this->replaceDynamically($sTranslate, $aParams);
    }
    return $sTranslate;
}

これは、コントローラーでの使用法です。

$this->pos_language->load_gettext('fr_FR');
echo $this->pos_language->_trans('Hello world, good morning');
4

2 に答える 2

1

.po ファイルを .mo ファイルにコンパイルする必要があると思います。Gettext は .mo ファイルを使用します。.po は人間が読める単なる形式です。

コンパイル手順を行っていない場合、アプリケーションはまだ翻訳されていない文字列を含む古い .mo ファイルを読み込んでいます...

このページには gettext の翻訳に関する詳細情報があります: http://wiki.creativecommons.org/Translating_PO_Files

于 2011-02-12T17:05:57.633 に答える
0

php-gettext を Smarty & Code Igniter 2 http://bit.ly/rrITVxと統合するためのヘルパーを作成しました。

それが役立つことを願っています

于 2011-10-24T11:42:21.900 に答える