-3

xml と php を使用して多言語を処理する方法を理解しようとしていますか? デフォルトで英語を使用できるようにしたいのですが、ユーザーが言語を選択した場合、たとえばドイツ語に変更したいと思います。この部分は理解できますが、特定の言語文字列がドイツ語に翻訳されていない場合、その文字列の英語版を選択できるようにしたいと考えています。私は次のように通常のphpとmysqlでこれを行いました:

$language = "de";
$sql = "SELECT * FROM ".$prefix."_countries WHERE con_id=$language"; 
$result = mysql_query($sql) ;
$row = mysql_fetch_assoc($result);

$userlang = $row['lang'];

$languagestring = array();
$res1 = mysql_query("SELECT * FROM ".$prefix."_language WHERE lang = 'en'");
while($row1 = mysql_fetch_assoc($res1)){

    $langid = $row1['id'];

    $res = mysql_query("SELECT * FROM ".$prefix."_language WHERE fk_id = $langid AND lang = '$userlang'");
    $row = mysql_fetch_assoc($res);

    if(!$row){
        $languagestring[] = $row1['text'];
    } else {
        $str = $row['text'];
        $languagestring[] = $str;
    }

}

これで、次のように db と同じ方法で xml を構築しました。

<data>
  <record id="1">
    <fk_id>0</fk_id>
    <lang>en</lang>
    <text>Network Error</text>
  </record>
  <record id="2">
    <fk_id>0</fk_id>
    <lang>en</lang>
    <text>There is a problem with the network!</text>
  </record>
  <record id="3">
    <fk_id>0</fk_id>
    <lang>en</lang>
    <text>OK</text>
  </record>
  <record id="4">
    <fk_id>1</fk_id>
    <lang>de</lang>
    <text>Das netvaerk sind corrupt!</text>
  </record>

' xml を使用して mysql で行うことをどのように達成できますか?

どんな助けでも大歓迎です:-)

4

2 に答える 2

0

XQuery では、次のように記述します (テストされていません)。

declare variable $userlang as xs:language external;

for $msg in /data/record[lang='en']
return (/data/record[lang=$userlang 
    and fk_id=$msg/@id], $msg)[1]

英語の場合: 変数$userlangは外部で言語コードに設定されます。recordを含むそれぞれについて<lang>en</lang>、対応するレコードが存在する場合はユーザーの言語で返し、存在しない場合は英語のレコードを返します。(より具体的には、そのようなレコードごとに、ユーザーの言語の対応するレコードとそれに続く英語のレコードからなるシーケンスを作成し、そのシーケンスの最初の項目を取ります。)

XSLT 2.0 では、非常によく似たことができます (この例で XQuery を使用する理由の 1 つは、XQuery の方がより簡潔であるという理由と、そのロジックが現在のコードの構造に似ているという理由の 1 つです)。

XPath にアクセスできる他の言語では、ほぼ同様のことができる場合がありますが、returnXPath 1.0 しかない場合は、式を何らかのアプリケーション ロジックに置き換える必要がある可能性があります。

于 2012-09-11T02:15:20.650 に答える
0

そのようなことを行うための標準があり、XML は必要ありません! 翻訳の最も一般的な方法は、オープン ソースの世界で非常に人気のある gettext を使用することです。

さらに、gettext で使用される MO ファイルはコンパイル済みファイルであるため、XML を解析するよりもはるかに高速です。

http://php.net/manual/en/function.gettext.phpをご覧ください

PO および MO ファイルを作成するには、PoEditまたはVirtaalを使用することをお勧めします。

于 2012-09-11T00:05:40.210 に答える