<?php
namespace Config;
use CodeIgniter\Config\BaseService;
use Config\Services as AppServices;
use Locale;
class Services extends BaseService
{
//override Language
//source code from system\Config\Services.php
public static function Language($locale = null, $getShared = true) {
if ($getShared) {
return static::getSharedInstance('language', $locale)->setLocale($locale);
}
if (AppServices::request() instanceof IncomingRequest) {
$requestLocale = AppServices::request()->getLocale();
} else {
$requestLocale = Locale::getDefault();
}
// Use '?:' for empty string check
$locale = $locale ?: $requestLocale;
return new \App\Libraries\I18n($locale); //override use Libraries
}
}
/**
* --------------------------------------------------------------------------
* Negotiate Locale
* --------------------------------------------------------------------------
*
* If true, the current Request object will automatically determine the
* language to use based on the value of the Accept-Language header.
*
* If false, no automatic detection will be performed.
*
* @var bool
*/
public $negotiateLocale = true;
您可以通过将当前语言存储在会话中,然后使用以下命令进行设置,从而对会话执行此操作:
service('request')->setLocale('YOUR NEW LOCALE HERE');
2条答案
按热度按时间deyfvvtc1#
这是我的解决方案。
创建App\Libraries类并扩展语言。
应用程序\库\i18n.php
您可以在这个Libraries类中添加方法或其他东西。
然后将此代码添加到app\Config\Services.php中
然后您可以在控制器中使用。
当我有两个语言文件时。(语言\中文\菜单. php,语言\中文\文本. php)
它起作用了。
xkrw2x1b2#
可以,在CodeIgniter 4中可以将所有语言行作为数组获取。为此,可以使用Language类的language()方法,该方法返回指定语言的所有语言行的数组。
下面是如何使用language()方法的示例:
这将返回default_locale配置选项中指定的缺省语言的所有语言行的数组。
如果要获取特定语言的语言行,可以将语言代码作为参数传递给language()方法:
这将返回法语的所有语言行的数组。
然后,可以在视图中使用此语言行数组来显示本地化字符串。例如:
在codeigniter 4中,实际上不需要这样做,因为您不需要加载语言文件来在视图中使用它们。
基本上,您可以在视图中执行此操作:
这将访问应用程序文件和语言行菜单。所以你可以有数百个语言文件,当你使用它们时,这些文件将根据需要用语言助手以正确的语言加载。
你只需要确保你使用的是正确的语言。这可以通过几种不同的方式来设置,你可以通过浏览器语言进入你的App/Config/App.php进行以下设置:
您可以通过将当前语言存储在会话中,然后使用以下命令进行设置,从而对会话执行此操作:
另一个选项(最好的一个)是在你的url中设置语言环境,并加载你所有的语言数据。