1

Windows で WAMP サーバーを使用し、テスト プロジェクトを作成します。これらのファイルが Web サイト フォルダーにあります。

C:\wamp\www\project\locale\ar_EG\LC_MESSAGES\messages.po C:\wamp\www\project\locale\en_US\LC_MESSAGES\messages.po

以下はPHPコードです:

$language="en_US";
$encoding = "UTF-8";
putenv("LANG=".$language);
setlocale(LC_ALL,$language);
$domain="messages"; // name of PO file
bindtextdomain($domain,"Locale");
bind_textdomain_codeset($domain, $encoding);
textdomain($domain);
echo gettext("name");

上記のコードは正常に動作しています。に置き換えようとするとen_USar_EGの翻訳も表示され、フォルダーen_USを削除して再試行すると、 notが表示されます。en_USmsgidmsgstr

setlocale検索したところ、Windows プラットフォームに問題があることがわかりましたが、Windows で実行するには解決策が必要です。

4

2 に答える 2

1

Windows の setlocale() には問題があります。

PHP マニュアルの setLocale()から:

Windows ユーザーは、Microsoft の MSDN Web サイトで、ロケール文字列に関する有用な情報を見つけることができます。サポートされている言語文字列は »言語文字列のドキュメントにあり、サポートされている国/地域文字列は »国/地域文字列のドキュメントにあります。

$language = 'english-us';の代わりに使用してみてください$language = 'en_US';

ar_eg、たぶんArabic_Egypt、またはの言語コードがわかりませんArabic_Egypt.1256

それが機能しない場合でも、 https://github.com/oscarotero/Gettextやhttps://launchpad.net/php-gettextなどの gettext を実装する PHP ライブラリを使用するオプションがあります

于 2014-12-30T12:15:09.003 に答える
0

次のコードを使用して、Windowsで動作するようにしました。

$locale = 'en_US';

if(!defined('LC_MESSAGES') || !setlocale(LC_ALL, $locale)) {
    putenv("LC_ALL=$locale");
}

$domain = 'messages';
$path = "C:\wamp\www\project\locale";
$codeset = 'UTF-8';

bindtextdomain($domain, $path);
textdomain($domain);
bind_textdomain_codeset($domain, $codeset);

echo gettext("name");
于 2014-12-30T12:14:53.860 に答える