语言包切换

  • 1.首先判断用户有无手动指定语言
  • 2.从session中获得当前语言
  • 3.session里面没有则从cookie里面去取
  • 4.若是cookie里没有,则根据IP段判断
  • 5.若不在指定ip范围内,自动侦测浏览器语言
首先我们在Common/Conf/tags.php配置开启多语言行为

return array(
‘app_begin’ => array(‘Behavior\CheckLangBehavior’),
);
接着我们看下ThinkPHP/Library/Behavior/CheckLangBehavior.class.php。其中根据ip程序没有作处理,请建表插入数据库自行解决。

if (!C(‘LANG_SWITCH_ON’,null,false)){
return;
}
// 启用了语言包功能
$langSet = C(‘DEFAULT_LANG’);
$varLang = C(‘VAR_LANGUAGE’,null,‘l’);
$langList = C(‘LANG_LIST’,null,‘en’);

// session_start();
// 首先判断用户有无手动指定语言
if(!empty( G E T [ _GET[ GET[varLang]))
{
$selectLang = G E T [ _GET[ GET[varLang];
}
if (isset($selectLang)) {
// 切换语言
$langSet = $selectLang;
a b c = ′ 用 户 自 己 设 置 语 言 ′ ; i f ( f a l s e = = = s t r i p o s ( abc='用户自己设置语言'; if (false === stripos( abc=;if(false===stripos(langList, $langSet)) $langSet = C(‘DEFAULT_LANG’);// 非法语言参数
t h i s − > s e l e c t L a n g ( this->selectLang( this>selectLang(langSet);
} else {
// 从session中获得当前语言
s e s s i o n L a n g = s e s s i o n ( ′ r m s e l e c t e d l a n g u a g e ′ ) ; i f ( i s s e t ( sessionLang = session('rm_selected_language'); if(isset( sessionLang=session(rmselectedlanguage);if(isset(sessionLang))
{
$abc=‘从Session中获得’;
$langSet = s e s s i o n L a n g ; i f ( f a l s e = = = s t r i p o s ( sessionLang; if (false === stripos( sessionLang;if(false===stripos(langList, $langSet)) {
$langSet = C(‘DEFAULT_LANG’);// 非法语言参数
t h i s − > s e l e c t L a n g ( this->selectLang( this>selectLang(langSet); // 刷新成正确的值
}
} else {
if (cookie(‘rm_selected_language’)) {// 获取上次用户的选择
$langSet = cookie(‘rm_selected_language’);
$abc=‘获取上次用户的选择’;
} elseif (null !== $this->getLangTypeByIP()) {
//优先级2 根据IP段判断
$langSet = $this->getLangTypeByIP();
KaTeX parse error: Expected 'EOF', got '}' at position 33: … }̲ elseif (isset(_SERVER[‘HTTP_ACCEPT_LANGUAGE’])) {// 自动侦测浏览器语言
preg_match(’/^([a-z\d-]+)/i’, $_SERVER[‘HTTP_ACCEPT_LANGUAGE’], $matches);
//优先级3 根据浏览器语言判断
l a n g S e t = s t r t o l o w e r ( langSet = strtolower( langSet=strtolower(matches[1]) == ‘zh-cn’ ? ‘zh’ : $matches[1];

                $abc='自动侦测浏览器语言'; 
            } 
            if (false === stripos($langList, $langSet)) $langSet = C('DEFAULT_LANG');// 非法语言参数 
            $this->selectLang($langSet); 
        } 
    } 
    // 定义当前语言 
    define('LANG_SET',strtolower($langSet)); 
    define('HELLO',$abc); 

    // 读取框架语言包 
    $file   =   THINK_PATH.'Lang/'.LANG_SET.'.php'; 
    if(LANG_SET != C('DEFAULT_LANG') && is_file($file)) 
        L(include $file); 

    // 读取应用公共语言包 
    $file   =  LANG_PATH.LANG_SET.'.php'; 
    if(is_file($file)) 
        L(include $file); 
     
    // 读取模块语言包 
    $file   =   MODULE_PATH.'Lang/'.LANG_SET.'.php'; 
    if(is_file($file)) 
        L(include $file); 

    // 读取当前控制器语言包 
    $file   =   MODULE_PATH.'Lang/'.LANG_SET.'/'.strtolower(CONTROLLER_NAME).'.php'; 
    if (is_file($file)) 
        L(include $file);

从以上代码我们发现语言包在Common/lang文件夹下

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
UniApp的国际化语言包支持一键全局切换语言的功能。以下是具体步骤: 1. 在UniApp项目中创建一个lang文件夹,用于存放语言包。 2. 在lang文件夹中创建一个index.js文件,用于定义语言包和默认语言。 3. 在index.js文件中定义语言包,例如: ``` export default { en: { hello: 'Hello', world: 'World' }, zh: { hello: '你好', world: '世界' } } ``` 4. 在index.js文件中定义默认语言: ``` export const DEFAULT_LANG = 'en'; ``` 5. 在App.vue中引入语言包和默认语言: ``` <template> <div> <p>{{ $t('hello') }}</p> <p>{{ $t('world') }}</p> </div> </template> <script> import lang from '@/lang'; import { DEFAULT_LANG } from '@/lang/index'; export default { computed: { lang() { return lang[this.$store.state.lang || DEFAULT_LANG]; } }, methods: { setLang(lang) { this.$store.commit('setLang', lang); uni.setStorageSync('lang', lang); } }, watch: { '$store.state.lang'(newVal) { uni.setNavigationBarTitle({ title: this.lang.title }); } }, created() { this.$store.commit('initLang', uni.getStorageSync('lang')); } } </script> ``` 6. 在main.js中定义语言切换方法: ``` import Vue from 'vue' import App from './App' import store from './store' import lang from '@/lang' import { DEFAULT_LANG } from '@/lang/index' Vue.config.productionTip = false Vue.prototype.$t = function(key) { const langType = store.state.lang || uni.getStorageSync('lang') || DEFAULT_LANG; const value = lang[langType][key] || lang[DEFAULT_LANG][key] || ''; return value; } App.mpType = 'app' const app = new Vue({ store, ...App }) app.$mount() ``` 7. 在store.js中定义语言切换方法: ``` import Vue from 'vue' import Vuex from 'vuex' import { DEFAULT_LANG } from '@/lang/index' Vue.use(Vuex) export default new Vuex.Store({ state: { lang: '' }, mutations: { initLang(state, lang) { state.lang = lang || DEFAULT_LANG; }, setLang(state, lang) { state.lang = lang; } }, actions: {}, modules: {} }) ``` 8. 在页面中添加语言切换按钮: ``` <template> <div> <button @click="setLang('en')">English</button> <button @click="setLang('zh')">中文</button> </div> </template> <script> export default { methods: { setLang(lang) { this.$store.commit('setLang', lang); uni.setStorageSync('lang', lang); } } } </script> ``` 这样就可以实现UniApp的国际化语言包一键全局切换语言的功能了。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值