多言語コンテンツを持つjqueryでウィンドウを作成するにはどうすればよいですか?
例えば。スペイン語の場合、「ウィンドウを閉じる」は「maximizar la ventana」のようになります。
2 に答える
en.php
サーバー上に、などという名前のファイルのセットを作成できsp.php
ます。
各ファイルには、すべてのメッセージテキストを保存できます。
のようにsp.php
、
$text["close_window"] = "maximizar la ventana";
$text["thank_you"] = "Gracias";
とでen.php
、
$text["close_window"] = "Close this window";
$text["thank_you"] = "Gracias";
メインファイル(index.foo
)で、このテキストを表示する場所を使用echo $text["close_window"];
できます。
echo $text["thank_you"]
次に、ユーザー文字列またはその他のデータに基づいて、ユーザーの言語に応じて、サーバー側にenglish.langまたはspanish.langを条件付きで含めることができます。
ファイル構造:
index.php//メインファイルlang//language-filesフォルダーlang/en.php//英語ファイルlang/sp.php//スペイン語ファイル
サンプルコード:
en.php:
<?php
$text["close_window"] = "Close this window";
$text["thank_you"] = "Thank you";
$text["welcome"] = "Welcome";
$text["home"] = "Home";
$text["about_us"] = "About Us";
$text["company_history"] = "Company History";
$text["company_profile"] = "Company Profile";
$text["contact_us"] = "Contact Us";
$text["greetings"] = "You have selected English";
?>
sp.php:
<?php
$text["close_window"] = "maximizar la ventana";
$text["thank_you"] = "Gracias";
$text["welcome"] = "Bienvenida";
$text["home"] = "Casa";
$text["about_us"] = "Sobre Nosotros";
$text["company_history"] = "Historia de la Empresa";
$text["company_profile"] = "Perfil de la Empresa";
$text["contact_us"] = "Contact Us";
$text["greetings"] = "Usted ha seleccionado Español";
?>
index.php:
//Check if browser sent the User Language code
if(isset($_SERVER["HTTP_ACCEPT_LANGUAGE"]) // if browser sent
//AND is NOT empty
&& ($_SERVER["HTTP_ACCEPT_LANGUAGE"] != "")
){ //if conditions END
// get first two letters from it
$user_lang = substr($_SERVER["HTTP_ACCEPT_LANGUAGE"], 0, 2);
}
if(isset($_POST["lang"]) //if user selected it
//and is in our desired format
&& (strlen($_POST["lang"]) == 2)
){
$user_lang = $_POST["lang"];
}
//if User requested to change language, ask him
if(isset($_POST["lang_change"])
&& ($_POST["lang_change"])) // is true ?
{
ask_lang();
exit(); // exit the script now..
}
if(!isset($user_lang)){ //if we dont have $user_lang yet, ask
ask_lang();
exit();
}
//Main index file contents
include("lang/".$user_lang."php");
?>
<html>
<head>
<title><?php echo $text["welcome"]; ?> | Example.com</title>
<head>
<body>
<?php echo $text["welcome"]; ?>, <?php echo $text["greetings"]; ?>!<br />
<a href="index.php" title="<?php echo $text["home"]; ?>" >
<?php echo $text["home"]; ?></a> |
<a href="about_us.php" title="<?php echo $text["about_us"]; ?>" >
<?php echo $text["about_us"]; ?></a> |
<a href="history.php" title="<?php echo $text["company_history"]; ?>" >
<?php echo $text["company_history"]; ?></a> |
<a href="profile.php" title="<?php echo $text["company_profile"]; ?>" >
<?php echo $text["company_profile"]; ?></a> |
<a href="contact_us.php" title="<?php echo $text["contact_us"]; ?>" >
<?php echo $text["contact_us"]; ?></a>
<p>
<form method="POST" action="">
<input type="hidden" name="lang_change" value="true" />
<input type="submit" value="<?php echo $text["change_language"]; ?>" name="change_language" />
</form>
</p>
</body>
</html>
<?php
//Main index file contents ENDS
function ask_lang(){
?>
<html>
<head>
<title>Please Select Language</title>
<head>
<body>
<form method="POST" action="">
<fieldset>
<legend>Please select language:</legend>
<input type="radio" value="en" name="lang" />English<img src="en.png"><br />
<input type="radio" value="sp" name="lang" />Spanish<img src="sp.png"><br />
<input type="submit" value="OK" name="sumbit" />
</fieldset>
</form>
</body>
</html>
<?php
} //function ask_lang() ENDS
仮定:
- 可能な翻訳ファイルのすべてのタイプが
Lang
フォルダにあります。 - ユーザー入力はサニタイズされます。
- Googleは、これらすべてのフレーズを文脈的に正しく翻訳しました。
これがCodepad.viper-7.comのライブスニペットです
Live Snippet&In-Answerコードにはわずかな違いがあります。ここで、私のコードはincludeを使用して外部言語ファイルを取得しますが、Viper-7のコードパッドではスクリプト内関数を使用します。
理由:コードパッドのシステムにファイルを入れたり書き込んだりできないため。
supplant
-methodバリアントを使用できます。Crockfordはここでそのようなことについて書き、それをの拡張として書きましたString
。一種のテンプレート作成が不可欠です。
if (!String.prototype.supplant) {
String.prototype.supplant = function (o) {
return this.replace(/{([^{}]*)}/g,
function (a, b) {
var r = o[b];
return typeof r === 'string' || typeof r === 'number' ? r : a;
}
);
};
}
問題に関しては、翻訳を含むオブジェクトを使用できます。
var spanish = {close: "maximizar la ventana", thanks: "Gracias"};
var german = {close: "Fenster schließen", thanks: "Danke"};
var english = {close: "Close window", thanks: "Thank you"};
次に、これを文字列で使用します。
var spanish_message = "<a href='javascript:void(0);'>{close}</a>".supplant(spanish);
var german_message = "<a href='javascript:void(0);'>{close}</a>".supplant(german);
これはjQueryではありませんが、かなりうまく機能します。ただし、自分で使用する言語の条件を特定する必要があります。サーバー側で何かを使用することをお勧めします。たとえば、使用する言語の追加パラメーターなどです。あなたが知っている異なるウィンドウがある場合、それはどの言語であるか、それぞれに使用される言語オブジェクトを提示することもできます。
また、翻訳がより複雑になる場合は、外部のjsファイルに入れることをお勧めします。
lg、
flo