|
|
@@ -22,6 +22,7 @@ use app\services\system\lang\LangTypeServices;
|
|
|
use app\services\system\lang\LangCodeServices;
|
|
|
use app\services\system\lang\LangCountryServices;
|
|
|
use think\facade\Config;
|
|
|
+use think\facade\Log;
|
|
|
|
|
|
if (!function_exists('getWorkerManUrl')) {
|
|
|
|
|
|
@@ -922,61 +923,72 @@ if (!function_exists('getLang')) {
|
|
|
*/
|
|
|
function getLang($code, array $replace = [])
|
|
|
{
|
|
|
- /** @var LangCountryServices $langCountryServices */
|
|
|
- $langCountryServices = app()->make(LangCountryServices::class);
|
|
|
- /** @var LangTypeServices $langTypeServices */
|
|
|
- $langTypeServices = app()->make(LangTypeServices::class);
|
|
|
- /** @var LangCodeServices $langCodeServices */
|
|
|
- $langCodeServices = app()->make(LangCodeServices::class);
|
|
|
-
|
|
|
- $request = app()->request;
|
|
|
- //获取接口传入的语言类型
|
|
|
- if (!$range = $request->header('cb-lang')) {
|
|
|
- //没有传入则使用系统默认语言显示
|
|
|
- $range = $langTypeServices->cacheDriver()->remember('range_name', function () use ($langTypeServices) {
|
|
|
- return $langTypeServices->value(['is_default' => 1], 'file_name');
|
|
|
- });
|
|
|
- if (!$range) {
|
|
|
- //系统没有设置默认语言的话,根据浏览器语言显示,如果浏览器语言在库中找不到,则使用简体中文
|
|
|
- if ($request->header('accept-language') !== null) {
|
|
|
- $range = explode(',', $request->header('accept-language'))[0];
|
|
|
- } else {
|
|
|
- $range = 'zh-CN';
|
|
|
+ //确保获取语言的时候不会报错
|
|
|
+ try {
|
|
|
+
|
|
|
+ /** @var LangCountryServices $langCountryServices */
|
|
|
+ $langCountryServices = app()->make(LangCountryServices::class);
|
|
|
+ /** @var LangTypeServices $langTypeServices */
|
|
|
+ $langTypeServices = app()->make(LangTypeServices::class);
|
|
|
+ /** @var LangCodeServices $langCodeServices */
|
|
|
+ $langCodeServices = app()->make(LangCodeServices::class);
|
|
|
+
|
|
|
+ $request = app()->request;
|
|
|
+ //获取接口传入的语言类型
|
|
|
+ if (!$range = $request->header('cb-lang')) {
|
|
|
+ //没有传入则使用系统默认语言显示
|
|
|
+ $range = $langTypeServices->cacheDriver()->remember('range_name', function () use ($langTypeServices) {
|
|
|
+ return $langTypeServices->value(['is_default' => 1], 'file_name');
|
|
|
+ });
|
|
|
+ if (!$range) {
|
|
|
+ //系统没有设置默认语言的话,根据浏览器语言显示,如果浏览器语言在库中找不到,则使用简体中文
|
|
|
+ if ($request->header('accept-language') !== null) {
|
|
|
+ $range = explode(',', $request->header('accept-language'))[0];
|
|
|
+ } else {
|
|
|
+ $range = 'zh-CN';
|
|
|
+ }
|
|
|
}
|
|
|
}
|
|
|
- }
|
|
|
|
|
|
- // 获取type_id
|
|
|
- $typeId = $langCountryServices->cacheDriver()->remember('type_id_' . $range, function () use ($langCountryServices, $range) {
|
|
|
- return $langCountryServices->value(['code' => $range], 'type_id') ?: 1;
|
|
|
- }, 3600);
|
|
|
-
|
|
|
- // 获取类型
|
|
|
- $langData = CacheService::remember('lang_type_data', function () use ($langTypeServices) {
|
|
|
- return $langTypeServices->getColumn(['status' => 1, 'is_del' => 0], 'file_name', 'id');
|
|
|
- }, 3600);
|
|
|
-
|
|
|
- // 获取缓存key
|
|
|
- $langStr = 'lang_' . str_replace('-', '_', $langData[$typeId]);
|
|
|
-
|
|
|
- //读取当前语言的语言包
|
|
|
- $lang = CacheService::remember($langStr, function () use ($typeId, $range, $langCodeServices) {
|
|
|
- return $langCodeServices->getColumn(['type_id' => $typeId, 'is_admin' => 1], 'lang_explain', 'code');
|
|
|
- }, 3600);
|
|
|
- //获取返回文字
|
|
|
- $message = (string)($lang[$code] ?? 'Code Error');
|
|
|
-
|
|
|
- //替换变量
|
|
|
- if (!empty($replace) && is_array($replace)) {
|
|
|
- // 关联索引解析
|
|
|
- $key = array_keys($replace);
|
|
|
- foreach ($key as &$v) {
|
|
|
- $v = "{:{$v}}";
|
|
|
+ // 获取type_id
|
|
|
+ $typeId = $langCountryServices->cacheDriver()->remember('type_id_' . $range, function () use ($langCountryServices, $range) {
|
|
|
+ return $langCountryServices->value(['code' => $range], 'type_id') ?: 1;
|
|
|
+ }, 3600);
|
|
|
+
|
|
|
+ // 获取类型
|
|
|
+ $langData = CacheService::remember('lang_type_data', function () use ($langTypeServices) {
|
|
|
+ return $langTypeServices->getColumn(['status' => 1, 'is_del' => 0], 'file_name', 'id');
|
|
|
+ }, 3600);
|
|
|
+
|
|
|
+ // 获取缓存key
|
|
|
+ $langStr = 'lang_' . str_replace('-', '_', $langData[$typeId]);
|
|
|
+
|
|
|
+ //读取当前语言的语言包
|
|
|
+ $lang = CacheService::remember($langStr, function () use ($typeId, $range, $langCodeServices) {
|
|
|
+ return $langCodeServices->getColumn(['type_id' => $typeId, 'is_admin' => 1], 'lang_explain', 'code');
|
|
|
+ }, 3600);
|
|
|
+ //获取返回文字
|
|
|
+ $message = (string)($lang[$code] ?? 'Code Error');
|
|
|
+
|
|
|
+ //替换变量
|
|
|
+ if (!empty($replace) && is_array($replace)) {
|
|
|
+ // 关联索引解析
|
|
|
+ $key = array_keys($replace);
|
|
|
+ foreach ($key as &$v) {
|
|
|
+ $v = "{:{$v}}";
|
|
|
+ }
|
|
|
+ $message = str_replace($key, $replace, $message);
|
|
|
}
|
|
|
- $message = str_replace($key, $replace, $message);
|
|
|
- }
|
|
|
|
|
|
- return $message;
|
|
|
+ return $message;
|
|
|
+ } catch (\Throwable $e) {
|
|
|
+ Log::error('获取语言code:' . $code . '发成错误,错误原因是:' . json_encode([
|
|
|
+ 'file' => $e->getFile(),
|
|
|
+ 'message' => $e->getMessage(),
|
|
|
+ 'line' => $e->getLine()
|
|
|
+ ]));
|
|
|
+ return $code;
|
|
|
+ }
|
|
|
}
|
|
|
}
|
|
|
|