10

gettext の使用

単一値

echo gettext( "Hello, world!\n" );

複数形

printf(ngettext("%d comment", "%d comments", $n), $n);

英語の同音異義語?

echo gettext("Letter");// as in mail, for Russian outputs "письмо"
echo gettext("Letter");// as in character, for Russian outputs "буква" 

英語の「文字」と同じで、人の文字でも文字でも構いません!gettext は同音異義語の正しい翻訳をどのように識別しますか?

4

4 に答える 4

3

私のようにPoeditを使用している人は、フォローする必要があります。最初に関数を作成します。WordPress が使用するような _x という名前のものを使用しています。

if (!function_exists('_x')) {

function _x($string, $context)
{
  $contextString = "{$context}\004{$string}";
  $translation = _($contextString);
  if ($translation == $contextString)  
     return $string;
  return $translation;
}
}

次に、poedit で、[Sources Keywords] タブに次のように入力する必要があります。

_x:1,2c
_

したがって、コンテキスト変換を使用する必要がある場合は、_x 関数を使用します。例えば:

<?php
echo    _x('Letter', 'alphabet');
echo    _x('Letter', 'email');
echo    _('Regular translation');

これらのリンクからすべての情報を取得しました。

于 2016-08-26T21:02:05.130 に答える
3

GNU xgettext ユーティリティを使用してソース コードから文字列を抽出しようとしているときに、上記の pgettext() のアイデアで問題が発生しました。

最初はうまくいくように見えます。--keyword 引数を使用して xgettext ユーティリティを実行し、これらのコンテキストとメッセージ文字列をテスト スクリプトから抽出できます。

echo pgettext('Letter','mail');
echo pgettext('Letter','character');

期待される出力を含む .pot ファイルを取得します。

...
msgctxt "mail"
msgid "Letter"
msgstr ""

msgctxt "character"
msgid "Letter"
msgstr ""
...

しかし、PHP *gettext() 関数ではコンテキスト文字列を渡すことができないため、翻訳されたテキストを取得できません。

GNU ユーティリティを使用できるようになったことで、作業が簡単になったので、次のようなものを使用することで解決しました。

function _c( $txt ) { return gettext( $txt ); }

echo "<P>", _c( "mail:Letter" ), "\n";
echo "<P>", _c( "character:Letter" ), "\n";

ここで xgettext ユーティリティを実行します

xgettext ... --keyword="_c:1" ...

私のテストスクリプトに対して。これにより、単純な msgid を持つ .pot ファイルが生成され、PHP の gettext() 関数を介してアクセスできます。

...
msgid "mail:Letter"
...
msgid "character:Letter"
...

次に、.pot テンプレートをさまざまな LC_MESSAGE フォルダーに .po ファイルとしてコピーし、翻訳されたテキストを編集します。

...
msgid "mail:Letter"
msgstr "Russian outputs for Mail: \"письмо\""

msgid "character:Letter"
msgstr "Russian outputs for Letter of the Alphabet: \"буква\""
...

そして私のテストスクリプトは動作します:

...
Russian outputs for Mail: "письмо"

Russian outputs for Letter of the Alphabet: "буква" 
...

xgettext のドキュメントはこちら: http://www.gnu.org/software/gettext/manual/html_node/xgettext-Invocation.html

(私はまだ poedit と「複数形」のテキストに問題がありますが、それは別の問題です。)

于 2013-08-11T05:29:56.250 に答える