161 lines
4.7 KiB
JavaScript
161 lines
4.7 KiB
JavaScript
|
//网站默认语言标识
|
|||
|
var languageKey = "zh_CN";
|
|||
|
/*
|
|||
|
设置一下网站支持的语言种类
|
|||
|
zh_CN(中文简体)、en_US(英语)
|
|||
|
*/
|
|||
|
var languageArray = ['zh_CN', 'en_US'];
|
|||
|
|
|||
|
/**
|
|||
|
* 页面初始化执行方法
|
|||
|
*/
|
|||
|
$(document).ready(async function () {
|
|||
|
//1.cookie是否存在
|
|||
|
if ($.cookie("userLanguage")) {
|
|||
|
languageKey = $.cookie("userLanguage");
|
|||
|
} else {
|
|||
|
//2.1 获取用户设置的浏览器语言
|
|||
|
var webLanguage = $.i18n.normaliseLanguageCode({});
|
|||
|
var charSize = $.inArray(webLanguage, languageArray);
|
|||
|
if (charSize > -1) {
|
|||
|
languageKey = webLanguage;
|
|||
|
// 存到缓存中
|
|||
|
$.cookie("userLanguage", webLanguage, {
|
|||
|
expires: 7
|
|||
|
});
|
|||
|
} else {
|
|||
|
//不支持的语言,使用默认中文
|
|||
|
}
|
|||
|
}
|
|||
|
$(".lan_select").val(languageKey)
|
|||
|
|
|||
|
/**
|
|||
|
* js中调用翻译代码示例(方法一)
|
|||
|
*/
|
|||
|
// let selectElement = document.getElementById('mySelect');
|
|||
|
// // 定义选项数据
|
|||
|
// let optionsData = [
|
|||
|
// {
|
|||
|
// value: '1',
|
|||
|
// //这里以js文件中name为例,进行翻译
|
|||
|
// text: 'tel'
|
|||
|
// },
|
|||
|
// {
|
|||
|
// value: '2',
|
|||
|
// text: 'name'
|
|||
|
// },
|
|||
|
// ];
|
|||
|
// console.log(optionsData,76)
|
|||
|
// // 填充<select>元素
|
|||
|
// optionsData.forEach(option => {
|
|||
|
// const newOption = document.createElement('option');
|
|||
|
// //给元素添加翻译标识
|
|||
|
// newOption.setAttribute("data-translate",option.text)
|
|||
|
// newOption.value = option.value;
|
|||
|
// newOption.textContent = option.text;
|
|||
|
// selectElement.appendChild(newOption);
|
|||
|
// });
|
|||
|
loadProperties(languageKey);
|
|||
|
jsDemo();
|
|||
|
});
|
|||
|
|
|||
|
/**
|
|||
|
* js中调用翻译代码示例(方法二)
|
|||
|
*/
|
|||
|
async function jsDemo() {
|
|||
|
let selectElement = document.getElementById('mySelect');
|
|||
|
// 定义选项数据
|
|||
|
let optionsData = [
|
|||
|
{
|
|||
|
value: '1',
|
|||
|
//这里以js文件中name为例,进行翻译
|
|||
|
text: await getTextByTranslationKey('tel')
|
|||
|
},
|
|||
|
{
|
|||
|
value: '2',
|
|||
|
text: await getTextByTranslationKey('name')
|
|||
|
},
|
|||
|
];
|
|||
|
// 填充<select>元素
|
|||
|
optionsData.forEach(option => {
|
|||
|
const newOption = document.createElement('option');
|
|||
|
//给元素添加翻译标识
|
|||
|
// newOption.setAttribute("data-translate",option.text)
|
|||
|
newOption.value = option.value;
|
|||
|
newOption.textContent = option.text;
|
|||
|
selectElement.appendChild(newOption);
|
|||
|
});
|
|||
|
}
|
|||
|
/**
|
|||
|
* 语言切换事件监听,切换后存cookie
|
|||
|
*/
|
|||
|
$(".lan_select").change(function () {
|
|||
|
languageKey = $(".lan_select").val()
|
|||
|
$.cookie("userLanguage", languageKey, {
|
|||
|
expires: 7
|
|||
|
});
|
|||
|
loadProperties(languageKey);
|
|||
|
location.reload();
|
|||
|
});
|
|||
|
|
|||
|
/**
|
|||
|
* 自动翻译页面内容
|
|||
|
* @param type 语言包标识
|
|||
|
*/
|
|||
|
function loadProperties(type) {
|
|||
|
$.i18n.properties({
|
|||
|
name: 'strings', // 资源文件名称
|
|||
|
path: 'languages/', // 资源文件所在目录路径
|
|||
|
mode: 'map', // 模式:变量或 Map
|
|||
|
language: type, // 对应的语言
|
|||
|
cache: false,
|
|||
|
encoding: 'UTF-8',
|
|||
|
callback: function () {
|
|||
|
// 回调方法
|
|||
|
$('[data-translate]').each(function () {
|
|||
|
//遍历每一个需要翻译的元素,本次翻译text
|
|||
|
var translationKey = $(this).data('translate');
|
|||
|
$(this).text($.i18n.prop(translationKey));
|
|||
|
});
|
|||
|
$('[data-translate-placeholder]').each(function () {
|
|||
|
//遍历每一个需要翻译的元素,本次翻译placeholder
|
|||
|
var translationKey = $(this).data('translate-placeholder');
|
|||
|
$(this).attr("placeholder", $.i18n.prop(translationKey))
|
|||
|
});
|
|||
|
}
|
|||
|
});
|
|||
|
}
|
|||
|
|
|||
|
/**
|
|||
|
* 获取指定翻译内容按钮点击执行方法---临时演示用,可以删掉
|
|||
|
*/
|
|||
|
function getKeyClick() {
|
|||
|
getTextByTranslationKey($("#data_key").val())
|
|||
|
}
|
|||
|
/**
|
|||
|
* 主动翻译指定key
|
|||
|
* @param translationKey 需要翻译的key
|
|||
|
*/
|
|||
|
function getTextByTranslationKey(translationKey) {
|
|||
|
return new Promise((resolve, reject) => {
|
|||
|
$.i18n.properties({
|
|||
|
name: 'strings', // 资源文件名称
|
|||
|
path: 'languages/', // 资源文件所在目录路径
|
|||
|
mode: 'map', // 模式:变量或 Map
|
|||
|
language: languageKey, // 对应的语言
|
|||
|
cache: false,
|
|||
|
encoding: 'UTF-8',
|
|||
|
callback: function () {
|
|||
|
// 回调方法
|
|||
|
//这一行演示用,可以删掉
|
|||
|
$("#data_key_text").text($.i18n.prop(translationKey))
|
|||
|
resolve($.i18n.prop(translationKey))
|
|||
|
}
|
|||
|
});
|
|||
|
})
|
|||
|
}
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|