frmb/language

一个PHP类,根据客户端浏览器语言在多语言网站上渲染特定语言

v1.3 2015-03-15 16:40 UTC

This package is not auto-updated.

Last update: 2024-09-28 17:53:51 UTC


README

Build Status Scrutinizer Code Quality Code Coverage

在Anax-MVC框架中,根据客户端浏览器语言在多语言网站上渲染特定语言的PHP类:http://github.com/mosbth/Anax-MVC/

如何使用

安装

使用composer安装,并在您的composer.json文件中输入以下代码

"require": {
	"frmb/language": "dev-master"
},

您也可以克隆此存储库,并将其手动安装到您的Anax-MVC项目中。

文件下载完成后,在您的Anax应用/content目录中创建一个新的名为Language的文件夹,这是XML文件将放置的位置。

如果您想测试包含的示例,请将文件从vendor/frmb/language/content/Language复制到您上面创建的Language文件中,并将webroot目录中的LanguageTest.php文件复制到您的目录中,然后即可开始使用!

用法

要加载Language模块,您需要在Front Controller中使用以下代码创建一个新的共享变量

$di->setShared('language', function() use ($di){
    $language = new \Anax\Language\Language();
	$language->setDI($di);
    return $language;
});

然后您就可以开始了。

基础知识

配置

在安装目录中打开class文件Language.php(默认为vendor/frmb/language/src/Language/),在__construct函数中有一个配置块。在那里您将设置网站将支持哪些语言,en(英语)应该始终包括,因为它是不受支持语言的默认语言。然后您可以插入任何您想要的语言,例如:sv(瑞典语),dk(丹麦语)和 no(挪威语)。请记住,如果您在配置中输入了一种语言,您必须创建一个匹配该语言的文件。

要创建新的语言文件,请使用此模板,并将其命名为prefix_board.xml,其中prefix是语言,例如ensv,在content/Language文件夹中粘贴此XML

<?xml version="1.0" encoding="utf-8"?>
<languagegroup>
	<lang>
		<word_app>board</word_app>
		<word_key>welcome_message</word_key>
		<word_default>Welcome to my module!</word_default>
	</lang>
	<lang>
		<word_app>board</word_app>
		<word_key>byline</word_key>
		<word_default>Powered by frmb/Language</word_default>
	</lang>
</languagegroup>

在开发和测试期间,强烈建议将详细选项设置为true,因为您将能够看到正在加载和未加载的文件。详细选项也可以通过在浏览器中写入?verbose来切换。

通用

在Front Controller内部加载的默认文件是prefix_board.xml文件,其中prefix是浏览器选择的所选语言,由Language自动检测(或手动输入?l=SHORT_LANGUAGE到浏览器中),这是保存所有全局单词和句子的地方,例如:信用,欢迎信息,页脚消息等等。

您可以在Front Controller中通过键入以下内容访问类

$app->language->words('welcome_message'); 

这将生成来自prefix_board.xml的文本,它是"欢迎来到我的模块!"或您设置的任何其他语言翻译。

要在Controller或Module类中使用它,您只需通过使用$this而不是$app来调用Words函数,例如

class CommentController
{
	public function viewAction(){
		echo $this->language->words('commentcontroller_hello'); 
	}
}

但是,如果我们在一个Controller或Module中调用Language类,那么我们不再在"board"内部,对吗?我们现在在Controller或Module内部,因此我们需要一个新的XML文档来覆盖它的单词!默认情况下,您需要在您的Language文件夹中创建一个新的文件,称为prefix_classname.xml,在上面的示例中,结果将是en_commentcontroller.xml。您只需将配置中稍高位置的xml代码粘贴进去即可,但如果你仔细观察,有一个名为"word_app"的xml对象,它说"board",然而,我们不再在board中,而是在Controller或Module中,所以将其更改为我们的类名,例如示例中的CommentController。

这应该涵盖了最基本的使用,更多高级用法!

高级用法

让我们继续处理外部控制器,例如我上面提到的CommentController。有时你不需要在主控制器中直接调用控制器或模块,但仍希望使用像我们的CommentController这样的词来在调用之前写出标题或句子。
您可以通过在Words函数中传递“module”参数来预先加载控制器文件。

$app->router->add('comment', function() use ($app) {
	$app->theme->setTitle($app->language->words( 'commentcontroller_hello', ['module' => 'CommentController']) );
	
	$app->views->add('comment/form', [
        'title' => , $app->language->words('commentcontroller_title'),
        'information' => $app->language->words('commentcontroller_information'),
    ]);
});

现在CommentController的xml文件已经被加载,可以使用了。

这不仅可以用于预先加载控制器,例如,我们可以创建一个动态的导航栏。

'home'  => [
    'text'  => $this->di->language->words('navbar_home', ['module' => 'navbar']),
    'url'   => $this->di->get('url')->create(''),
    'title' => 'Home route of current frontcontroller'
],
'comments'  => [
    'text'  => $this->di->language->words('navbar_comments),
    'url'   => $this->di->get('url')->create('comments'),
    'title' => 'Route to our Comment Controllers'
],

使用上面的示例需要一个名为prefix_navbar.xml的新文件,并将word_app设置为navbar。

强制使用某种语言也是可能的,例如,我们可以使用参数lang始终将其设置为英语。

$app->views->add('me/hem', [
	'content' => $content . $app->language->words('welcome_message') . '<br/>' . $app->language->words('welcome_message', ['lang' => 'en']),
	'byline' => $byline . $app->language->words('byline'),
]);

变更日志

2015-03-14 1.2 - 添加Travis CI和Scrutinizer。优化代码,并为PHPUnit添加了4个更多测试用例。
2015-03-14 1.1 - 许多更新
2015-03-08 1.0 - 首次发布