2009-04-22 6 views
3

英語での多言語ページを開発したいと思います。ドイツ語をクリックするとページ言語がドイツ語に変わり、英語が変わります英語に。これを私に指示してください。事前に感謝....PHPで多言語を使用したWebページを作成する

+0

あなた自身が翻訳を提供していますか? – Rob

答えて

2

セッションを使用して、ユーザーが設定した言語を保存できます。

$_SESSION["lang"] = "en"; 
$_SESSION["lang"] = $_GET["lang"]; 
// or this way, then you can do example.com/?lang=en 

次に、翻訳の配列を含むファイルを作成します。

$lang["en"]["welcome"] = "Welcome to the site"; 

し、別のファイルには、ドイツ語の翻訳

$lang["de"]["welcome"] = "Willkommen auf der Webseite"; 

を持つことができます。そして、あなただけのセッション

echo $lang[$_SESSION["lang"]]["welcome"]; 

これはこれの簡易版であると$ LANG配列を呼ぶだろうオブジェクトを使用して翻訳を保存することもできます。 しかし、これは非常に大きなSELECTか非常に多くのものが含まれているので、データベースを使用して翻訳を保存することをお勧めしません。

+0

最後のエコーでは意味しません:$ lang [$ _ SESSION ['lang'] ] ['ようこそ']; –

+0

実際には、そのページのすべてのコンテンツを変更する必要があります。 http://www.google.co.in/ – Sakthivel

+0

のように@sakthioprのウェブサイトは通常この方法で翻訳されていますこれは単に特定の場所に出力する必要がある文字列の集まりです –

-2

私は個人的に私の完全な意見を翻訳します。したがって、ファイル構造は次のようになります。

そして、Olafurの提案によれば、セッション変数に言語を格納し、このようなことをします。

session_start(); //dont forget to call this somewhere 
$_SESSION['lang'] = 'en'; 
//and then in somewehere else: 
include 'views/'.$_SESSION['lang'].'/someView.php'; //or whatever method is used to include views. 

EDIT
あなたのスクリプトからあなたの出力を区切る必要があります。今、私たちは直接以下のすべての出力を追加することができ

//someScript.php 
    $timestamp = time(); 

、それ:したがって、あなたがcurrect UNIXタイムスタンプを取得するように、いくつかのスクリプトのものを行うスクリプトを持つことになり、これは上記の例でsomeScript.phpになりメンテナンス性が非常に難しくなりますので、ここではいくつかのViewView.phpファイルとなる別のファイルで出力します。だから、「エン」フォルダ内someView.phpは次のようになります。

<html> 
<head> 
<title>Currect UNIX timestamp!</title> 
</head> 
<body> 
<p>The current UNIX timestamp is: <?php echo $timestamp; ?> seconds</p> 
</body></html> 

そして、それはpracticly同じファイルになり「デ・フォルダ内のが、ドイツのすべてのテキストを持ちます。あなたがここにMVCの詳細をお読みください

include '../views/'.$_SESSION['lang'].'/someView.php'; 

http://www.onlamp.com/pub/a/php/2005/09/15/mvc_intro.html

は、今、私たちが行う必要があるすべては、このように我々は、そのスクリプトの一番下に次の行を追加し、当社のsomeScript.phpでこれらの出力ファイルが含まれています

注:この例は厳密なMVCではありませんが、これはあなたに考えを与えるはずです。

+0

私はあなたを手に入れることができません少し詳しく説明してください – Sakthivel

+2

しかし、ビューを編集する必要があるときは、それぞれのビューを編集する必要がありますそれは非常に実用的ではない –

+0

1つの大きな問題があります:ビューを編集して新しいビューを作成する:常に多くの作業をd o。 1つの状況でのみ、私は複数のビュー、すなわち左から右への表示と右から左からの表示の必要性を認識します。だから、異なるターゲット(ブラウザ、モバイル、テキストブラウザ、...)とさまざまな種類の言語(左から右と右から左)の新しいビューを作成する必要があります – Gregor

0

ほとんどのフレームワークには、これを支援するヘルパーが用意されています。ここにはCodeignitercakePHPがあります。

7

http://php.net/manual/en/intro.gettext.phpの方法を使用します。うまく動作し、他のプロジェクト(非PHPプロジェクト)ですでにhttp://www.gnu.org/software/gettext/manual/gettext.htmlで作業しました。だから始めるのは簡単でした。

正しい方法は誰がテキストを翻訳するかによって異なります。開発者の場合は、各言語ごとに独自の見解を持つことができます。しかし、テキストを翻訳する他の人々がいる場合は、gettext(翻訳は専用ファイルにあり、この種のファイルを扱うツールがあります)のようなものが正しい選択です!

+3

Gettextは絶対に行く方法です。それは第三者があなたのウェブサイトを翻訳するのをはるかに容易にします。 基本的には、あなたのウェブサイトをgettext-iseし、.poファイルを翻訳者に送り、翻訳されたすべての文字列を含む.poファイルを返します。コードの変更はありません。 –

1

通常、UTF-8対応のWebサイトが必要です。これは、ファイルのヘッダーを介して設定されます。 (また、header())を使って設定することもできます。

私は、サイトを英語と中国語にしたいと思っています。それから、言語ファイルを用意することをお勧めします。おそらく、配列や、サイトに表示する段落を格納するオブジェクトです。そして、あなたはその段落を印刷します。

次に、ユーザーが要求している言語を知るために、私は$ _SESSIONを使用してユーザーの選択した言語を格納します。

その後、あなたの言語ファイルは、この

$lang["en"]["Welcome"] = "Welcome to the site"; 

のようになります。そして、中国の歓迎ファイルはあなたがこれをプリントアウトしたい場所に続いて、この

$lang["ch"]["Welcome"] = "歡迎"; 

のようなものを持っているでしょう。あなたはそうするでしょう

echo $lang[$_SESSION["lang"]]["Welcome"]; 
+0

複数の動的ページを含む40ページ以上のページでは、時間がかかります。私はディレクトリと言語を分離するのが最善だと思います。だからwebsite.com/englishはenglish website/englishになります –

+0

私はその情報が質問に役立つかもしれないと思います:) –

0

あなたが望む任意の文字セットでHTMLのコンテンツ部分を入力することができます。ちょうどset the charset and content encoding properlyにしてください。たとえば、単純なUnicodeの場合はUTF-8に設定します。

0

Railsが扱うのはwellです。これを行う方法のアイデアについては、それをチェックしてみてください。

8

奇妙なことに、多くのPHP開発者は、すべての自然言語が同じ文法を持っていると思っているようです。パラメータを持たない翻訳フレームワークを作ることは、単に不可能です。文字列$lang['welcomeTo'] $sitenameはほとんどの言語(歓迎stackoverflow)のために正しく翻訳するかもしれませんが、それは$sitename $lang['welcomeTo'](stackoverflow'a hos geldiniz)またはどちらかの方法が可能なドイツ語のために、例えばトルコ語のために失敗します(Willkommen auf stackoverflow/Stackoverflowheißt Sie willkommen)。そして、複数の変数で文章を翻訳しようとすると、これは悪化します。要するに

Language::getCurrentLanguage()->translate('welcomeTo', array('sitename' => $sitename)); 

# Translation file for english (configfile-style): 
welcomeTo=Welcome to $sitename 

# Translation file for turkish: 
welcomeTo=$sitename'a hos geldiniz 

# Translation file for german: 
welcomeTo=Willkommen auf $sitename 
# Or 
welcomeTo=$sitename heißt sie willkommen 

唯一のオプションは、パラメータ変換(関数発言を):使用することですあなたは本当の国際化をしたい場合は、あなたの翻訳ではなく、変数を取得する関数を使用します。 PHPのintl拡張子を調べることもできます。

+0

本当に素晴らしいことは考えられませんでした – Geomorillo

1

多言語ウェブサイトを構築する有効な方法の1つは、ハードコードされたラベルを使用せず、適切な言語ファイルから検索することです。データベースに格納するデータが表示されている場合は、異なる言語で翻訳を格納するデータベーステーブルを追加することを検討する必要があります。たとえば、C#で作業を行うには、ラベル値を格納しているリソースファイルを使用できます。

0

グレゴールが言ったように、 gettextは私のためのproffesional方法です...ここ

Windowsでpoファイルを作成する場合uはの.poや.moのファイルを使用する必要がありますlink

良い記事ですが、私はこの方法では、いくつかの重要なポイント

I-を追加します、あなたはLinuxの下でそれを使用することはできません。または、linuxの下で作成された.poファイルは、Windowsでは使用できません。

II- Linuxは.poファイル自体を作成することができますが、Windowsで私はあなたが(uはそのサイトからそれを得ることができた:http://www.poedit.net/)などpoeditなどのプログラムを使用することをお勧め

III-いくつかのロケールでは、文字の問題を抱えています。しかし、私はどちらが覚えていないのですか?:(

関連する問題