有免费的第 3 方控件可以使用 ISO 标准 XML 文件执行此操作(我编写了一个数据库实用程序来创建、编辑和导出这种格式)。
其他答案是非常手动的,并且比使用此控件涉及更多的工作。
您需要的控件位于:
http ://ezcomponents.org/docs/api/trunk/introduction_Translation.html
在服务器上安装 eZ 组件后,您需要检索所有 eZ 组件所需的基本控件
require_once "ezc/Base/base.php";
/**
* __autoload()
*
* @param mixed $className
* @return
*/
function __autoload( $className )
{
ezcBase::autoload( $className );
}
然后您必须定义 XML 语言文件的位置(参见:ISO639-2、ISO3166 和 Qt Linguist)
$config["language_code"] = "en_us"; // as defined by ISO639-2 and ISO3166
// grab our translation XML file
$backend = new ezcTranslationTsBackend( dirname( __FILE__ ). '/translations' );
$backend -> setOptions( array( 'format' => $config["language_code"].'.xml' ) );
// create a manager object
$manager = new ezcTranslationManager( $backend );
$language = $manager->getContext( $config["language_code"], 'strings' );
现在您可以通过简单地调用以下函数来获取字符串
getTranslation( "SOME_KEY" );
要检索具有参数的短语,请使用以下语法,请注意 [KEYWORD] 和“关键字”之间的关系是有意的,建议使用
getTranslation( "FIND_[KEYWORD]_BY_[TYPE]", array("keyword" => $keyword, "type" => $type ) );
TS XML 文件的一个示例是(应称为 en_US.xml)
<!DOCTYPE TS>
<TS>
<context>
<name>strings</name>
<message>
<source>ZONE_TYPE</source>
<translation>Zone Type</translation>
</message>
<message>
<source>ZONE_TOOL</source>
<translation>Zone Tool</translation>
</message>
<message>
<source>HELLO_[NAME]_WELCOME_TO</source>
<translation>Hello, %name, welcome to Webfood Admin</translation>
</message>
<message>
<source>YOUR_ADMINISTRATIVE_SESSION_HAS</source>
<translation>Your administrative session has timed out. Please login again.</translation>
</message>
</context>
</TS>
我只需要在您的 PHP 会话中设置一个存储使用的语言的设置,可能会在用户登录他们想要的语言之前或之后询问用户,如果您有帐户,则将其存储到他们的用户表中。没有理由一遍又一遍地发送 URL 值,这是个坏主意。