Fluentずgettextの違い



通垞のgettextに察するFluentの利点に぀いおの議論を続けお、翻蚳におけるFluent の䜜成者の公匏な立堎を公​​開したす。


Gettextは、GNUプロゞェクトずその関連アヌキテクチャ゜リュヌションに深く根ざしたロヌカリれヌションシステムです。 Fluent Projectは、gettextを、読みやすい圢匏のロヌカラむズファむルを䜿甚しお補品リリヌスサむクル党䜓を管理するための、ラむブラリおよびツヌルの完党な䜎レベルのプラットフォヌムに䟝存しない゚コシステムの良い䟋ず考えおいたす。 同時に、Fluentパラダむムは、重芁なロヌカラむズの偎面で他のアヌキテクチャ゜リュヌションに぀ながり、その結果、完党に異なるAPIずラむフサむクルに぀ながりたす。



蚀い換えれば、gettextは玠晎らしいプロゞェクトですが、ロヌカラむズぞのアプロヌチに関する芋解を共有しおいたせん。



gettextずFluentの䞻な違いは次のずおりです。

gettext 流Flu
メッセヌゞID ゜ヌス文字列 開発者が提䟛
匕数のバむンド 䜍眮* キヌに基づいお
振蟌のキャンセル あいたい䞀臎 ID倉曎
デヌタ保存 人間が読める圢匏.poたたはコンパむル枈み圢匏.mo 読み取り可胜な圢匏.ftl
倖郚匕数 いや 豊富なサポヌト
耇数のサポヌト 特別な堎合 オプションセレクタの䞀般的な構文の䞀郚
耇数のサポヌト緯床 開発者の裁量で、すべおの翻蚳に圱響したす ロヌカラむザヌの裁量で、特定のロケヌルのみに圱響したす
のために蚭蚈 C *ファミリヌの蚀語 Web、最新のクラむアント蚀語
リンクを投皿 開発者が決定 ロヌカラむザヌによっお定矩された
メッセヌゞテンプレヌト 必芁.pot いや
ロヌカラむザヌのコメント いいえ* フルサポヌト
゚ラヌ回埩 もろい 匷力な回埩ロゞック
耇合メッセヌゞ いや 倀+メッセヌゞごずの属性
双方向テキスト いや 双方向アむ゜レヌション
囜際フォヌマット いや 明瀺的および暗黙的


手配



gettextずFluentの最も重芁な違いは、メッセヌゞ識別子です。 Gettextは、゜ヌス文字列通垞は英語を識別子ずしお䜿甚するこずにしたした。 この遞択は簡単に思えたすが、さらに倚くの制限が課されたす。



たず、このアプロヌチでは、元の行を倉曎するず、それに関連付けられおいるすべおの翻蚳が無効になりたす。 これは、すべおの翻蚳を曎新する必芁があるため、開発者の負荷を倧幅に増加させ、元のメッセヌゞを倉曎しないようにしたす。



第二に、゜ヌス蚀語で同じテキストを持぀耇数のメッセヌゞの導入が耇雑になり、異なる方法で翻蚳する必芁がありたす。 たずえば、「開く」ボタンず「開く」マヌクのテキストは、最初のテキストがコマンドで、2番目が説明であるため、さたざたな方法で翻蚳できたす。 Gettextには、同じ゜ヌスセグメントを持぀行を区別するためのオプションのmsgctxtコンテキスト行がありたす。 このアプロヌチは、開発者にそのような状況を認識する責任を負いたす。これは、利益の分離の原則ず矛盟したす。



Fluentは、たさにこの理由でテキストを再利甚するこずを掚奚しおいたせん。 ゜ヌステキストを他の翻蚳から分離するこずも、耇合メッセヌゞ1぀の翻蚳単䜍の耇数の行を含み、1぀のナヌザヌむンタヌフェむスりィゞェットにアタッチされおいるを入力する機胜およびメッセヌゞぞの識別子ベヌスのリンクにずっお重芁です。



Fluentは、開発者ずロヌカラむザヌの間に「合意」を確立したす。 開発者は䞀意の識別子ず䞀連の倉数未読メッセヌゞの数、ナヌザヌ名などを入力し、Fluent構文を䜿甚しおロヌカラむザヌがこの識別子のメッセヌゞテキストの䜜成方法を決定したす。



開発者は、そのようなメッセヌゞの翻蚳の詳现な実装に぀いお心配するべきではありたせん。 開発者に必芁なのは、UIの特定の堎所に適した1行のテキストを取埗しお、特定の識別子で行を芁求するこずです。



メッセヌゞオプション



Gettextは、特に耇数圢の囜際化のために、小さな関数セットをサポヌトしおいたす。 ただし、このような耇数の構文は、暙準のgettext構文に加えお特殊なケヌスであり、可倉性を必芁ずする他のケヌスに合わせお拡匵するこずは困難です。



Fluentは、セレクタヌで䜿甚できる文字列バリ゚ヌションの基本抂念をサポヌトしおいたす。 通垞、耇数芏則はそのようなセレクタヌになりたすが、蚀語の文法的な特城によっおは、性別、偏角、たたは環境䟋時刻やオペレヌティングシステムなどが存圚する堎合もありたす。 Fluent構文を䜿甚するず、ロヌカラむザヌはこれらすべおの機胜を怜蚎し、状況に完党に䞀臎するテキストを䜜成できたす。



倖郚匕数



Gettextは倖郚匕数をサポヌトしおいたせん。 蚀い換えるず、パラメヌタヌの圢匏数倀、日付を蚭定するこずはできたせん。 gettextのパラメヌタヌをフォヌマットするには、 printfに枡す文字列を返すか、結果の文字列でString.prototype.replaceを実行するこずをお勧めしたす。



Fluentでは、倖郚匕数のサポヌトが構文の䞭心にありたす。 倖郚匕数は補間されるだけでなく、セレクタヌのパラメヌタヌずしおも䜿甚され、組み蟌み関数に転送するこずもできたす。 これにより、ロヌカラむザヌは特定のケヌスに察しおより正確なテキストを䜜成できたす。 さらに、Fluentはオブゞェクトの呚囲にFSI / PDIマヌカヌを配眮しお、双方向テキストの指向性分離を保護し、リヌフ文字列の操䜜を犁止しお、開発者の負担を軜枛したす。



責任の分離



さらに、gettextが耇数のルヌルを凊理する方法では、システム蚭蚈者がメッセヌゞを倚倉量メッセヌゞにするか単䞀行にするかを遞択する必芁がありたす。 Fluentの芳点からするず、開発者はそのような問題に察凊すべきではありたせん。 倚くの堎合、英語で1぀のオプションで十分な堎合、他の蚀語では耇数圢のバリアントを远加する必芁がありたす。



Fluentは、倚くのロケヌルで゜フトりェアを開発する堎合、開発者が同様の蚀語知識を持っおいおはならず、各蚀語にはロヌカラむズ䞭に特定のアクションの自由があるべきだず想定しおいたす。



その結果、Fluentは、ある蚀語の芁件を別の蚀語に「挏らす」こずなく各翻蚳を個別に保存し、ロヌカラむザヌが特定の行に必芁ずする機胜を心配する必芁のない開発者のためにすべおの翻蚳を「䞍透明」に保ちたす。



振蟌のキャンセル



開発サむクルでは、翻蚳がオリゞナルに察しお「キャンセル」無効になる状態が3぀ありたす。





アヌキテクチャ䞊の理由により、gettextは3぀のレベルすべおをfuzzyず呌ばれる1぀の状態に結合したす。 ゜ヌス行の倉曎少なくずも完党、少なくずも重芁でないは、翻蚳の取り消しに぀ながりたす。



Fluentでは、䞀意の識別子を䜿甚するこずで、これらのレベルのうち2぀を3぀目のレベルずは別に保぀こずができたす。行の゜ヌステキストに小さな倉曎を加え、識別子を保存するず、翻蚳は有効なたたです。 䞀方、開発者が識別子を倉曎するず、すべおの翻蚳がキャンセルされ、曎新が必芁になりたす。



このようなアヌキテクチャ゜リュヌションは、ほずんどのリリヌスサむクルでより有益であるず考えおいたすが、 䞭間レベルの倉曎の堎合、開発者は識別子を保存するか倉曎するかを遞択する必芁がありたす぀たり、 マむナヌ な倉曎ず重芁な倉曎のどちらか。



たた、開発者がメッセヌゞをその内容を完党に無効にするこずなく曎新枈みずしおマヌクできるように、メッセヌゞのバヌゞョン管理のアむデアも怜蚎しおいたす。 この状態では、叀いバヌゞョンの翻蚳が未翻蚳の文字列よりも優れおいるずいう芳点に基づいお、翻蚳を有効に保぀こずができ、同時にツヌルは翻蚳を曎新する必芁性に぀いおロヌカラむザヌに通知できたす。



デヌタ圢匏



Gettextは、* .po、* .pot、および* .moの3぀のファむル圢匏を䜿甚したす。 これは、生産サむクルでのgettextの実装に圱響を䞎え、メッセヌゞの抜出やコンパむルなどの手順を远加したす。



Fluentは、単䞀の* .ftlファむル圢匏を䜿甚したす。これにより、実装が簡玠化され、デヌタの䞍䞀臎を招く可胜性がある远加の手順が䞍芁になりたす。



Unicodeサポヌト



GettextはUTF-8で゚ンコヌドできたす。 䞀般的に、ここでUnicodeサポヌトが終了したす。 耇数圢に独自のデヌタセットを䜿甚し、日付ず数倀の曞匏蚭定方法がわからず、双方向テキストの操䜜に圹立ちたせん。



Fluentは、暙準化されたラむブラリずCLDR、ICU、およびECMA402アルゎリズムを広範囲に䜿甚し、ロヌカリれヌションず囜際化をうたく組み合わせおいたす。



おわりに



Fluent APIず構文はgettextよりも倧幅に改善されおいるず思われるため、囜際的な゜フトりェアに䜿甚するこずをお勧めしたす。



Fluentの詳现






All Articles