使用多种语言

时间:2014-05-25 09:10:16

标签: php html

说,我有一些带有文字的HTML。

<html>
<body>


<div><h1>Welcome to my home page!</h1></div>
<div><p>Some text.</p></div>
<div><p>Some more text.</p></div>

</body>
</html>

说,我想使用多种语言,如英语和德语。我该怎么办?我应该使用这些语言中的字符串制作2个文件EN.phpDE.php,我的html应该是这样吗?我的意思是它应该为每个字符串<?php...?>吗?

<html>
<body>
<?php include 'EN.php';?>

<div><h1><?php echo "$a";?></h1></div>
<div><p><?php echo "$b"; ?></p></div>
<div><p><?php echo "$c";?></p></div>

</body>
</html>

4 个答案:

答案 0 :(得分:2)

当您正在研究如何翻译绑定到特定HTML结构的内容时,该结构很可能代表页面和/或对象,因此它具有翻译所需的所有上下文,您可以使用HTML文档对象模型(DOM)。

在它的基本形式中,HTML已经翻译,但也标记了要翻译的文本:

<html>
<body>


<div><h1 lang="en:translate">Welcome to my home page!</h1></div>
<div><p lang="en:translate">Some text.</p></div>
<div><p lang="en:translate">Some more text.</p></div>

</body>
</html>

然后将该HTML加载到对象模型中,并通过剥离包含&#34; en:translate&#34;的所有lang标记,编译英文版本。 &#34; lang&#34;的价值属性:

<html lang="en">
<body>


<div><h1>Welcome to my home page!</h1></div>
<div><p>Some text.</p></div>
<div><p>Some more text.</p></div>

</body>
</html>

在执行此操作时,您还可以运行能够通过使用转换表(可以像PHP中的数组一样简单)或更具体的转换机制(如gettext)将每个英语字符串转换为已转换字符串的回调(它可以处理特定语言结构,如复数形式,并提供优化的文件格式来存储翻译)。然后,德语页面可以很容易看起来像:

<html lang="de">
<body>


<div><h1>Willkommen auf meiner Home-Page!</h1></div>
<div><p>A bisserl text.</p></div>
<div><p>Hallelujah! Da ist ja noch mehr Text.</p></div>

</body>
</html>

Document Object Model (DOM)Gettext都是字段中的常用机制。两者都有详细记录,有支持工具,可以作为PHP扩展。

但是,如果这种翻译符合您的确切需求可能会有问题。从你在问题中所提出的例子来看,这似乎是一个很好的选择,但正如我已经评论过的那样,你应该先自己做更多的研究,以获得更多的想法,以及可能的方法。

答案 1 :(得分:2)

所以你需要的是这样的东西:

//Language
if(!empty($_GET['language']) && in_array($_GET['language'], $languages)) {
    $_SESSION['language'] = $_GET['language'];
    $language = $_SESSION['language'];
} else if(!empty($_SESSION['language']) && in_array($_SESSION['language'], $languages)) {
    $language = $_SESSION['language'];
} else {
    $_SESSION['language'] = 'Dutch';
}
include_once 'languages/'.$_SESSION['language'].'.php';

对于每种语言,你有一个单独的文件,其中有一个名为$language的数组,所以你可以这样做:

$language = array('English' => 'Dutch');
//For other langaue you do almost the same but then:
$langauge = array('English' => 'German');

检查$_SESSION['language']是否在数组中,这样就不会出现空白页

在html文件中使用如下:

<h1><?php echo $language['English']; ?></h1>

当会话更改时将选择另一个翻译

我希望这有帮助,如果没有请让我知道

答案 2 :(得分:0)

国际化和本地化是一个相当大的主题,但通常的过程是您为每种语言都有一个文件,用于指定“密钥”,然后是该密钥的翻译文本。然后,在您的代码中,您可以在任何地方使用转换函数来呈现一些采用目标语言和本地化键的文本,然后从相关语言文件中吐出翻译。

之前我使用过gettext取得了巨大的成功,尽管不是在php中。 http://www.php.net/manual/en/book.gettext.php

答案 3 :(得分:0)

我在大多数矿山项目中使用多种语言,这是我的方法:

以此格式为您想要的每种语言创建文件:

<?php
    $lang = array(
        "rememberMe" => "Erinnern",
        "login" => "ANMELDEN",
        "register" => "REGISTRIEREN",
        "username" => "Benutzername", ...

然后以json格式回显语言

echo json_encode($lang);

现在,在您的应用程序中,您可以使用会话加载语言,如下所示:

if(isset($_COOKIE['lang'])){
    $_SESSION['lang'] = $_COOKIE['lang'];
}

if(isset($_SESSION['lang'])){
        $languages = array("bs", "en", "de");
        if(in_array($_SESSION['lang'], $languages)){
            $langName = $_SESSION['lang'];
            include "lang/$langName.php";
        }else{
            include "lang/en.php";
        }
    }else{
        include "lang/en.php";
    }

当您想要显示时,例如用户名,您可以这样显示:

echo $lang['username'];