PHP常量的翻译替代方法

时间:2015-11-05 09:35:20

标签: php cookies translation

我一直在为定制设计的网站翻译工作一段时间以及那些需要的翻译,所以我目前正在翻译文本的内容如下:

我有多个文件,其中包含一堆PHP文件,其中包含多种语言的字符串。每个文件都声明完全相同的常量。像这样:

define('MENU_ITEM1','WHO ARE WE?');
define('MENU_ITEM2','PROFESSIONAL ACTIVITY');

define('MENU_ITEM1','¿QUIÉN SOMOS?');
define('MENU_ITEM2','ACTIVIDAD PROFESIONAL ');

然后,在菜单上我有语言选择器。 select在显示所选语言的url上创建一个get变量,如下所示:

<select id="select" onChange="idioma(this.value);"> 
        <option value="ES">Español (ES)</option>
        <option value="EN">English (EN)</option>
        ...
</select>

这会调用一个向网址添加get的函数。像这样(针对每种语言):

location.href=url+"?lang=ES";

所以在另一个文件中,我们有一个PHP开关,它从URL中获取语言并创建一个包含正确语言文件的cookie。如果未设置cookie,我们将使用默认语言。它会是这样的:

<?php 

if(isSet($_GET['lang'])){
    $lang = $_GET['lang'];

     $_SESSION['lang'] = $lang;

    setcookie('lang', $lang, time() + (3600 * 24 * 30));

    }else if(isSet($_SESSION['lang'])){
        $lang = $_SESSION['lang'];
    }else if(isSet($_COOKIE['lang'])){
        $lang = $_COOKIE['lang'];
    }else{
        $lang = 'ES';
    }

switch ($lang) {

    case 'EN':
    $lang_file = 'en/lang.en.php'; 
    break;

    case 'ES':
    $lang_file = 'es/lang.es.php'; 
    break;

    default:
    $lang_file = 'es/lang.es.php';

}

include_once $lang_file;

&GT;

因此,通过这个神奇的过程,网络被翻译。 问题:我有点觉得这不是最佳解决方案,所以如果有人有办法解决它或以任何其他方式做,那将是非常有帮助的。请注意,我不使用WordPress,因此WP插件是不可能的(我使用它们,我知道它们存在)。我见过使用子域名(en.something.com)或其他文件夹(something.com/en/)的网站,但我不确定该怎么做。

1 个答案:

答案 0 :(得分:0)

相信我,我以前去过那里。我为一个现在使用超过5种语言的网站编写了功能。

在我的方法中,我使用了CSV文件(逗号分隔值)。 您可以使用以下代码开始开发。

您的西班牙语翻译文件es.csv

'Home', 'Inicio'
'Page 1', 'Pagina 1'
'Page 2', 'Pagina 2'
'Page 3', 'Pagina 3'

第一列单词将是您在函数中定义的默认语言。

<a href="#"><?php __("Home"); ?>

然后,您将使用类似于顶部的switch语句来捕获用户选择的语言。 __()函数看起来像这样。输入将是“家”

$csv = array_map('str_getcsv', file($file));
// Logic (where it would do the translation)
// It could look for the input in the $cvs variable if it exist then use the next value of the current array. Else keep the text the same.

您的cvs文件需要制作要翻译的确切字词

我希望这是有道理的。