6

ここで私を終わらせた別の質問を引用します。

PHP コードのこれらの行にある 2 つのアンダースコアは何を意味するのでしょうか?

$WPLD_Trans['Yes']=__('Yes',$WPLD_Domain);
$WPLD_Trans['No']=__('No',$WPLD_Domain);

およびWordpressなどでのなど__()の使用に関する関連する質問。_()

上記およびその他の関連するものへの回答として開始されました。しかし、もう少し詳細になったので、独自の質問(回答付き)として投稿してください。

自由に編集して改善してください。または、より良い回答/質問を入力してください。

4

1 に答える 1

8

の使用法__(…)

二重アンダースコアは、さまざまな実装で使用されます。Wordpress (WP) が言及され、phpMyAdmin (PMA) は別のものです。

これは、PHP では単一のアンダースコアとしてエイリアスを持つネイティブ PHP 関数 に反映されます。これは PHP に固有のものではありません。Gettextは、Unix ライクなシステムで多言語プログラムを作成するための長年の GNU プロジェクトです。さまざまなプログラミング言語でエイリアスが見つかります。gettext()_()_()

主題についての考察

謙虚/正直な意見では、_()のネイティブおよび __()カスタム実装としてgettext、または他のロケール固有の使用法が唯一有効なものであると言うことができます-それは十分に確立された慣習であるためです。一方、それは良くありませんが、それでも簡潔です。たとえば、ANSI-C 標準では、二重下線__はコンパイラの内部使用のために予約されています。PHPはCと密接に関連しているため、彼らはそれを予約しています。一般に、言語間でさえ混同するのは最善ではありません(IMHO)。境界/薄い氷/などにあります。

(ここでの問題の 1 つは、言語サポートとは何の関係もないものの基盤として使用するUnderscoreJSの選択です_。) それをプロトタイプ .js と$混ぜ$$て、誰かが見るときに頭をかきむしる理由を理解するかもしれません。 __()PHP と JS が機能するシステムの実装にどれほど近いかを考慮してください。


ロケールのサポート

このステップでは、使用法についていくつかメモをとりますi18nL10n

WP23および (十分に文書化された) PMAと同様に、言語サポートを提供することでよく使用されます。例えば:

__('Error');Feilノルウェー語またはFehlerドイツ語で降伏します。しかし、ここで注意しなければならない重要なことは、同じ領域では、直接翻訳以上のものがあるだけでなく、異なるロケール/文化/言語で見られる他の癖もあるということです.

例 (指定する):

一部の言語ではコンマ – ,– を分数区切りとして使用し、他の言語ではドット – .– を同じ目的で使用します。その他の典型的なロケールのバリエーションは、センチメートルとインチ、日付形式、12 時間時計と 24 時間時計、通貨などです。

       NUMBER LEN 時間
LANG1: 3,133.44 2.00 インチ 午後 5:00
LANG2: 3.133,44 5,08 cm 17:00

あなたが明らかにするコードの次の層は、変数名、関数、およびファイル名のi18nようなやや不可解な規則への参照をおそらく持っているでしょう。l10n

それらが何を意味するかを理解すると、それらは非常に便利ですが、定義はややぼやけている可能性があります. 一般に、次のものがあります。

i18n: 国際化
l10n: ローカリゼーション (多くの場合 L10n)
g11n: グローバリゼーション (IBM や Sun Microsystems などで使用)
l12y: ローカライズ可能性 (Microsoft)
m17n: 多言語化 (国際化とローカリゼーションの連続)
... 等々。

あぁ、頭が痛い。

数字は、単語の最初の文字と最後の文字の間の文字数を表します。前後の文字 – は単語の最初と最後の文字です。ふぅ。そう:

       i18n l10n
国際化 ローカリゼーション
 | | | | | | | |
 +-- 18 文字 --+ +-- 10 --+

私 18 nl 10 n

((Group of Eight) のように、この規則に従わない、より強力な数秘術G8もありますが、それではプログラミングの領域外にいるのでしょうか?)

次に、定義に進みます。

W3Cには、国際化 (i18n) とローカリゼーション(l10n)のかなりまともな定義があります。

  • 国際化 (i18n) は、文化、地域、または言語が異なる対象ユーザー向けに簡単にローカライズできるようにする、製品、アプリケーション、またはドキュメント コンテンツの設計および開発です。

  • ローカリゼーション (l10n) とは、製品、アプリケーション、またはドキュメントのコンテンツを、特定の対象市場 (ロケール) の言語、文化、およびその他の要件を満たすように適応させることを指します。

この件に関するdebianの短く簡潔なバージョンは次のとおりです。

  • 国際化 (I18N): ソフトウェアが潜在的に複数のロケールを処理できるようにすること。
  • ローカリゼーション (L10N): ソフトウェアが特定のロケールを処理できるようにすること。

ドメインの使用

コードを見たり、ローカリゼーションについて読んだりするときに、 domainの使用法に出くわすことがよくあります。より検索エンジンに適した名前は、おそらくTranslation Domain.

(ここで私は少し薄氷の上にいる. ).

つまり、これをcontextとして定義できます。ベースとしてロケールがあります。例えばスコットランド。しかし、ドメインをテーマや職業などの一部としてさらに定義することもできます。たとえば、プログラミングにおけるJavaは、コーヒー ショップとはかなり異なります。または、女性対農業についての堕落したサイトで牛を飼う。

いくつかの手がかりを提供するページはrepoze.orgで、次のものがあります。

通常、翻訳ディレクトリは次のようになります。

/path/to/your/translation_root/en_US/LC_MESSAGES/
/path/to/your/translation_root/en_GB/LC_MESSAGES/
/path/to/your/translation_root/nn_NO/LC_MESSAGES/
…

GetText で使用されるファイル

たとえば PMA を見ると、 という名前のディレクトリが見つかりますlocale。さまざまな言語のさまざまなディレクトリが含まれています。ファイルは.mo拡張子付きです。これは GetText 固有のファイルです。通常、プレーン テキスト ファイルである PO (Portable Object) ファイルから開始します。これらは索引付けされ、MO、マシン オブジェクト、最適化のために索引付けされたファイルにコンパイルされます。詳細はこちら(上記のPMAリンクと同じ)。


于 2013-01-11T01:10:24.880 に答える