frmb / language
一个PHP类,根据客户端浏览器语言在多语言网站上渲染特定语言
Requires
- php: >=5.4
- anax/mvc: dev-master
This package is not auto-updated.
Last update: 2024-09-28 17:53:51 UTC
README
在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是语言,例如en或sv,在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 - 首次发布