PHP上常量的翻译替代方案



我已经为定制设计的网站和那些需要的翻译工作了一段时间,所以我目前正在做的翻译工作如下:

我有多个文件,其中有一堆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>

这会调用一个函数,该函数会向url添加一个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;

?>

因此,通过这个漫长的过程,网络得以传播问题:我有一点感觉,这不是一个最佳解决方案,所以如果有人有办法解决它或以任何其他方式解决它,那将非常有帮助。注意,我不使用WordPress,所以WP插件是不可能的(我使用过它们,我知道它们存在)。我见过使用子域(en.something.com)或其他文件夹(something.com/en/)的网站,但我真的不知道如何做到这一点。

相信我以前去过那里。我已经为一个现在使用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文件需要制作要翻译的确切单词

我希望这是有道理的。

最新更新