核心 PHP 网站翻译成其他语言
Core PHP Site translate to other language
我创建了数组 $_en 来存储英语 words/sentences 和 $_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
根据数组和键值,将根据站点翻译功能调用文本。
如有更好的解决方案和改进,欢迎交流。提前指正谢谢。
更好的解决方案,正如我在评论中提到的 Thamilan 将使用 class 来处理转换。
这样想;
您的模板文件
$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;
}
}
在此 class 中,您需要从存储翻译的位置获取翻译。您可以将此 class 存储在数组中,或者更好的解决方案是从 CSV 文件加载它们。
试试这个:--
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') 到 return 一个与您的 switch 语句中完全相同的数组,这对于其他(非程序员)来说更容易为你读书和写作。如果您继续使用这种风格命名文件,您可以将 userLanguage() 减少为类似:
public function userLanguage()
{
$file = '/path/to/language/config/' . $this->UserLng . '.ini';
if(!file_exists($file))
{
//Handle Error
}
return parse_ini_file($file);
}
尝试另一个解决方案:--
创建摘要class
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 最适合您。
我创建了数组 $_en 来存储英语 words/sentences 和 $_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
根据数组和键值,将根据站点翻译功能调用文本。
如有更好的解决方案和改进,欢迎交流。提前指正谢谢。
更好的解决方案,正如我在评论中提到的 Thamilan 将使用 class 来处理转换。
这样想;
您的模板文件
$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;
}
}
在此 class 中,您需要从存储翻译的位置获取翻译。您可以将此 class 存储在数组中,或者更好的解决方案是从 CSV 文件加载它们。
试试这个:--
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') 到 return 一个与您的 switch 语句中完全相同的数组,这对于其他(非程序员)来说更容易为你读书和写作。如果您继续使用这种风格命名文件,您可以将 userLanguage() 减少为类似:
public function userLanguage()
{
$file = '/path/to/language/config/' . $this->UserLng . '.ini';
if(!file_exists($file))
{
//Handle Error
}
return parse_ini_file($file);
}
尝试另一个解决方案:--
创建摘要class
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 最适合您。