【问题标题】:Translate website in many language [closed]用多种语言翻译网站[关闭]
【发布时间】:2024-04-30 09:55:02
【问题描述】:

我的网站有一个文件夹language,其中有:

zh.php

<?
$lang = array(

    'sp1' => 'Welcome',
    'sp2' => 'Home',

);
?>

it.php

<?
    $lang = array(

        'sp1' => 'Benvenuto',
        'sp2' => 'A casa',

    );
    ?>

index.php 我喜欢:

<h4><?=$lang['sp1']?></h4>
<a><u><strong><?=$lang['sp2']?></a></u></strong><br />

但这是从 cpanel 更改语言的选项,我如何转换为地理语言.. 当意大利人访问我的网站时,可以用意大利语查看我的网站等?

【问题讨论】:

  • 您可以查询 user_agent 接受的语言并根据接受的语言返回的内容更改要使用的数组,阅读 *.com/questions/620276/…
  • 这个问题要么太宽泛(翻译,或“i18n”,是一个很大的话题),要么不是很清楚:您是在问如何检测用户的首选语言? cpanel 跟这个有什么关系?
  • 你能把代码准确地写出来,放在哪里,因为我不太擅长php :(
  • 在下面查看@Companjo 的答案,它会做你想做的事情:),你想在使用 $lang 变量之前把它放在页面顶部附近是最好的。所以它会首先检查浏览器用户的语言,如果它的“en-us”加载了英语语言数组,那么在你的页面中 $lang['sp1'] 将是 en 中的任何 $lang['sp1']。 php 如果检测到意大利语,那么 $lang['sp1'] 将是其中的任何内容。php $lang['sp1'] :)

标签: php mysql translation


【解决方案1】:

你可以使用$_SERVER['HTTP_ACCEPT_LANGUAGE']

<?php
$lang = substr($_SERVER['HTTP_ACCEPT_LANGUAGE'], 0, 2);
switch ($lang){
    case "fr":
        //echo "PAGE FR";
        include("fr.php");
        break;
    case "it":
        //echo "PAGE IT";
        include("it.php");
        break;
    case "en":
        //echo "PAGE EN";
        include("en.php");
        break;        
    default:
        //echo "PAGE EN - Setting Default";
        include("en.php");//include EN in all other cases of different lang detection
        break;
}
?>

【讨论】:

  • 虽然这是一个有用的工具,但它不应该单独使用,并且应该始终为用户提供明确的语言选择,如this W3C document中所述
  • 我同意,但我认为@user3462476 会有点复杂
  • 好建议的复杂性不是提供坏建议的借口;单独实施,这将导致糟糕的可用性。此外,它不需要比这很多复杂:只需使用它来选择默认语言,然后让用户单击链接来更改它,并将他们的选择保存在 cookie 中。
  • 在另一个站点工作但在站点交换 .com 没有...为什么?我在相同的页面中添加了这个。
【解决方案2】:

浏览器在名为Accept-Language 的HTTP 标头中宣传用户的“首选”语言,您可以在PHP 中将其读取为$_SERVER['HTTP_ACCEPT_LANGUAGE']

这个标题实际上有a fairly complex structure,允许为多种语言提供优先级,还有language itself can take a few different formsThe answers to this previous question 讨论如何完全解析它。

但作为第一个近似值,您可以只取前两个字母,通常是列出的 ISO 639-1 代码here by the US Library of Congresshere on Wikipedia

$default_language = substr($_SERVER['HTTP_ACCEPT_LANGUAGE'], 0, 2);

但是,这绝不应该是选择语言的唯一方法。如explained fairly clearly by this W3C document,浏览器可能没有正确配置,或者用户可能没有使用自己的计算机,所以它不会发送正确的值。

相反,您应该将此视为默认设置,并允许用户覆盖它。这可以像在每个页面上提供将?lang=it(等)添加到当前 URL 的链接一样简单。然后设置一个包含他们偏好的cookie,从那时起忽略accept-language

if ( $_GET['lang'] ) {
    // User asked for a particular language; obey, and remember in a cookie
    setcookie('lang', $_GET['lang'], 0, '/');
    $preferred_language = $_GET['lang'];
} elseif ( $_COOKIE['lang'] ) {
    // Cookie found from previous selection
    $preferred_language = $_COOKIE['lang'];
} else {
    // Guess based on browser settings
    $preferred_language = substr($_SERVER['HTTP_ACCEPT_LANGUAGE'], 0, 2);
}

【讨论】:

  • 但是如何添加php文件:it.php和en.php
  • @user3462476 好吧,一旦你运行这段代码,你就有了一个变量$preferred_language。如果是'it',则包括it.php;如果没有,则回退到包含英文字符串;添加法语时,还可以检查是否为'fr',等等。
  • 怎么包含...可以完全写代码..因为我不是很懂
  • @user3462476 抱歉,如果你想让我写你的代码,请付钱给我。如果您无法编写相当于“如果$preferred_language'it' 然后包括it.php 否则包括en.php”这句话的PHP 代码,那么您将很难自己编写任何东西。
  • 默认需要en.php,意大利人访问网站时需要它.php
最近更新 更多