0

我想用PHP的数组函数来翻译一个网站。我为所有要翻译的文本创建了包含数组的 PHP 文件。

<?php 
//ESPANOL
$lang = array(
              'work' => 'Trabajo'
              'packaging' => 'Empaque'
             );

然后我在我的 nav.php 文件中调用它们,也将在内容部分中调用它们。

<?php include('includes/languages/es.php'); ?>
<a href="#"><?php echo $lang['work']; ?></a>

一切都很简单。

我想知道的是如何在不编辑 HTML 的情况下在这些数组文件之间切换,这样我就不必链接到另一个 'index_es.php' 等。我知道链接会是这样的,但我不知道'不知道这将如何工作。

<a href="index.php?es.php>Español</a>|<a href="index.php/?en.php">English</a>

我猜我需要包含另一个包含语言文件的文件,然后可以从中选择链接,但我不知道代码是什么。它是否涉及在链接上方包含一个“lang_directory”,然后以某种方式从那里包含?

**另外我想避免使用 Zend/Gettext 翻译,因为我想从里到外学习这个。

4

3 回答 3

3

您可以创建另一个包含目标语言的维度。然后传递一个 GET 参数来选择该语言。如果无法识别该语言,您可以回退到英语。这是一个示例。

$languages = array(
    'en' => array(
        'work' => 'work',
        'packaging' => 'packaging'
    ),
    'es' => array(
        'work' => 'Trabajo',
        'packaging' => 'Empaque'
    ),
);

// default language to use when the requested isn't found
$defaultLanguage = 'en';

// language requested via GET
$requested = $_GET['locale'];

// use the requested language if it exists, otherwise the default language
$language = isset($languages[$requested]) ? $requested : $defaultLanguage;

// our translations
$translation = $languages[$language];

// "work" translated based on the language
echo $translation['work'];

Español 的链接看起来像这样。

index.php?locale=es
于 2013-03-10T11:39:16.700 回答
2

我会保留您的阵列系统,将链接更正为类似的index.php?lang=en内容,然后根据 lang 参数包含您的文件:

if ( isset($_GET['lang']) && file_exists('includes/languages/'.$_GET['lang'].'.php') ){
  include_once('includes/languages/'.$_GET['lang'].'.php');
}

如果您想在会话中保留语言参数,请执行以下操作:

if ( isset($_GET['lang']) && file_exists('includes/languages/'.$_GET['lang'].'.php') ){
  $_SESSION['lang'] = $_GET['lang'];
}
if ( !isset($_SESSION['lang']) ){
  // Default language
  $_SESSION['lang'] = 'en';
}
include_once('includes/languages/'.$_SESSION['lang'].'.php');
于 2013-03-10T11:51:54.813 回答
1

一种方法是使用会话。

  1. 制作一个 lang.php 文件,用于在语言之间进行更改。

    <?php
            //Start session
            session_start();
            //Do we get a lang variable
            if (isset($_GET['lang'])) {
                    //Make sure we only get the lang filename
                    $lang = basename($_GET['lang']);
                    //If the file exists, then save it to session
                    if (file_exists('includes/languages/' . $lang . '.php'))
                            $_SESSION['lang'] = $lang;
            }
            //If the client were refered here (via hyperlink) send them back
            if (isset($_SERVER['HTTP_REFERER']))
                    header('location: ' + $_SERVER['HTTP_REFERER']);
    ?>
    
  2. 在您想要多种语言的文件的标题中,插入。

    <?php
            //Start session
            session_start();
            //Default language
            $lang = 'english';
            //If the client have set a language, use that instead
            if (isset($_SESSION['lang']))
                    $lang = $_SESSION['lang'];
            //Load language file
            include('includes/languages/' . $lang . '.php');
    ?>
    

更改语言的链接将如下所示:

<a href="lang.php?lang=espanol">Español</a>|<a href="lang.php?lang=english">English</a>

Out 也可以从 lang.php 文件中取出代码并放入一个包含文件中,该文件将在包含语言文件之前加载并删除 HTTP_REFERER 重定向。

更改语言的链接将如下所示:

<a href="?lang=espanol">Español</a>|<a href="?lang=english">English</a>
于 2013-03-10T11:59:33.170 回答