は、PHPのgettextのためのsetlocaleと型定義エラー
は、私はPHP関連のファイルでi18nためgettextを実装するために開始する問題を回避するには、適切な構造は何ですか。 ウェブ上に多くのチュートリアルがありますが、私は明確な答えを見つけるのが難しいですどこにスクリプト内のsetlocaleを配置するのですか?。誰もがスクリプトの冒頭にそれを置くようだ。
例次のPHP関数ではかなりうまく動作しますが、私は他のPHP関数の問題(下のコメントを参照してください)持っているのgettext
:
$category = LC_ALL;
$locale = "fr_FR";
$domain = "messages";
$lat = 43.848977; // float with a point separator
setlocale($category, "$locale");
putenv("$category=$locale");
bindtextdomain($domain, "./Locale");
bind_textdomain_codeset($domain, 'UTF-8');
echo gettext("sample text"); // works OK
// The issue starts here
$center_lat = filter_var($lat, FILTER_SANITIZE_NUMBER_FLOAT, FILTER_FLAG_ALLOW_FRACTION);
// The float $latitude is interpreted as string due to comma in French,
// filter_var do interpret as a float anymore and $center_lat gives something like 43848977 instead of 43,848977
私は
Iを考えた解決策を私がgettextを呼び出すたびに、私はこれ(ほとんど)のような何かをする必要がありますが、
$userLocale = setlocale($category, 0); // current setting is returned
echo gettext("sample text");
setlocale($category, $userLocale);
// SCRIPT RESUME
$userLocale = setlocale($category, 0); // current setting is returned
echo gettext("other text");
setlocale($category, $userLocale);
私は成功せずType Castingを試してみました
を試してみましたofficial manual of gettext
に完全なファイルの例も明確な答えを見つけられませんでした:
$center_lat = filter_var((float) $lat, FILTER_SANITIZE_NUMBER_FLOAT, FILTER_FLAG_ALLOW_FRACTION);
をQUESTION
が道私のソリューションです。予期せぬエラー(型キャスティングであろうと他のものであろうと)を避けるために行くのですか?
このソリューションは面白いですが、グローバルではありません。それは浮動小数点に適用されます(私が実行する可能性がある他のタイプについてはどうでしょうか)。私が思った解決法が適切な方法であるかどうかはわかりません。 – gentleboy
入力パラメータがフランス語ではなく、出力がフランス語であればロケールを切り替える必要があります。どちらもフランス語であれば、毎回ロケールを切り替える必要はありません。私はむしろ入力と出力の両方がフランス語であることを保証するコードを書いています。 – akky