Core PHP Site翻译成其他语言

时间:2017-01-04 10:39:10

标签: php core translate

我创建了数组$ _en来存储英文单词/句子和$ _no数组来存储挪威文本,以便将它用作我的核心PHP项目的翻译。

<?php
$_en = array(
    'mail' => 'email',
    'msg1' => 'how are you?'

);
$_no = array(
    'mail' => 'epost',
    'msg1' => 'hvordan har du det ?'
);

echo "EMAIL IN ENGLISH:".$_en['mail']."\n"; //email in english
echo "EMAIL IN NORWEGIAN:".$_no['mail']; //email in NORWEGIAN
echo "Message IN NORWEGIAN:".$_no['msg1']; //Message in NORWEGIAN

根据数组和键值,将根据站点翻译功能调用文本。

如果有更好的解决方案和增强功能,欢迎提出。提前感谢我。

3 个答案:

答案 0 :(得分:1)

更好的解决方案,正如我在评论中提到的Thamilan将使用类来处理转换。

这样想;

您的模板文件

$trans = new Translate('en');
<h1><?php echo $trans->__('This is a title'); ?></h1>

Translate.php

class Translate {
    public function __construct($lang) {
        $this->lang = $lang;
    } 

    public function __($string) {
        // $translatedString = $this->getTranslatedString($string);
        return $translatedString;
    }
}

在本课程中,您需要从存储位置获取翻译。您可以将此类存储在数组中,或者更好的解决方案是从CSV文件加载它们。

答案 1 :(得分:0)

试试这个: -

parse_ini_file()是一个非常强大的小工具,可以完全满足您的期望。使用像这样的简单文件,我们称之为en.ini:

PAGE_TITLE = My website page title
HEADER_TITLE = My website header title
SITE_NAME = My Website
SLOGAN = My slogan here
HEADING = Heading
MENU_LOGIN = Login
MENU_SIGNUP = Sign up
MENU_FIND_RIDE = Find Ride
MENU_ADD_RIDE = Add Ride
MENU_LOGOUT = Logout

您可以简单地使用:parse_ini_file('en.ini')返回一个与switch语句完全相同的数组,这对其他(非程序员)来说更容易为您读写。如果您要继续使用此样式命名文件,则可以将userLanguage()减少为:

public function userLanguage()
{
    $file = '/path/to/language/config/' . $this->UserLng . '.ini';
    if(!file_exists($file))
    {
        //Handle Error
    }
    return parse_ini_file($file);
}

答案 2 :(得分:0)

另一种解决方案尝试: -

创建抽象类

interface Language
{
    public function getPageTitle();
    public function getHeaderTitle();
    public function getSiteName();
    public function getSlogan();
    public function getHeading();
    public function getMenuLogin();
    public function getMenuSignup();
    public function getMenuFindRide();
    public function getMenuAddRide();
    public function getMenuLogout();
}

虽然界面很小,但实现它可能会生成一个大文件,尽管它可能比数组样式更清晰:

class English implements Language
{
    public function getHeaderTitle()
    {
        return 'My website header title';
    }

    public function getHeading()
    {
        return 'Heading';
    }

    // etc...
}

替代: -

或者,您可以组合这些样式并使用单例语言和getter方法访问该数组,即:

class Language
{
    private $languageArray;
    private $userLanguage;

    public function __construct($language)
    {
        $this->userLanguage = $language;
        $this->languageArray = self::userLanguage();
    }

    private static function userLanguage()
    {
        $file = '/path/to/language/config/' . $this->userLanguage . '.ini';
        if(!file_exists($file))
        {
            //Handle Error
        }
        return parse_ini_file($file);
    }

    public function getPageTitle()
    {
        return $this->languageArray['PAGE_TITLE'];
    }

    public function getHeaderTitle()
    {
        return $this->languageArray['HEADER_TITLE'];
    }

    //etc...
}

这将提供两者的好处。但就个人而言,除非您计划在不久的将来添加更多语言,否则我认为解决方案#2最适合您。