【发布时间】:2019-07-22 03:13:22
【问题描述】:
我想知道如何根据多种语言更改urlpath。
如果 url 是 www.xyz.com/en/all-services-from-mal-to-sin/details?amount=1000&scy=SGD 并且如果 lang 是 en,则将 url 替换为匹配的对象键,如果 lang 为 zh,则将 url 替换为匹配的对象值。
如何使用 javavscript 将 urltext 替换为对象
// for en will receive obj as
{
"transfer-services": "transfer-services",
"about-info": "zhi-zhu",
"contact": "zhi-phi",
"all-services-from": "all-services-from",
"to": "to",
"sin": "sin",
"mal": "zmal"
};
// for zh will receive obj as
{
"transfer-services": "xi-hou-zhi-n",
"about-info": "zhi-zhu",
"contact": "zhi-phi",
"all-services-from": "hui-zhi-phi-tho",
"to": "zhi",
"sin": "stin",
"mal": "zmal"
};
// for hi will receive obj as
{
"transfer-services": "sabhee sevaen",
"about-info": "baare-mein",
"contact": "sampark-karen",
"all-services-from": "sabhee-sevak",
"to": "se",
"sin": "sg",
"mal": "ml"
}
// will receive above obj base on curr_lang and prev_lang
function translationUrl(langvalue) {
var result = $.ajax({
url: "/" + langvalue,
method: "get",
async: false,
dataType: 'json',
data: {
urllang: langvalue
},
success: function (data) {
return data;
}
}).responseText;
return JSON.parse(result).language.urltext;
}
var prevObj = translationUrl(prev_lang);
var currentObj = translationUrl(curr_lang);
function swapObj(val) {
const lang = Object.keys(val).reduce((a, c) => (
{ ...a, [val[c]]: c }
), {});
return lang;
}
function transformURL(url, curr_lang, prev_lang, prevObj , currObj) { // convert prev to curr lang
let [base, lang, segment, ...rest] = url.split('/');
const obj = lang === prev_lang ? currObj: swapObj(currObj);
Object.keys(obj).forEach(key => {
segment = segment.replace(key, obj[key]);
});
return [base, lang, segment, ...rest].join('/');
}
console.log(transformURL('www.xyz.com/zh/all-services-from-mal-to-sin/details?amount=1000&scy=SGD'),"zh", "hi",prevObj , currObj );
预期输出:
var prev_lang ="en";
var curr_lang = "hi";
if url is
www.xyz.com/en/all-services-from-mal-to-sin?amount=1000&scy=SGD
=> output :www.xyz.com/hi/sabhee-sevak-ml-to-sg?amount=1000&scy=SGD
var prev_lang ="hi";
var curr_lang = "zh";
if url is
www.xyz.com/hi/sabhee-sevak-ml-to-sg?amount=1000&scy=SGD
=> output :www.xyz.com/zh/hui-zhi-phi-tho-zmal-zhi-stin?amount=1000&scy=SG
var prev_lang ="hi";
var curr_lang = "en";
if url is
www.xyz.com/hi/sabhee-sevak-ml-to-sg?amount=1000&scy=SGD
=> output :www.xyz.com/en/all-services-from-mal-to-sin?amount=1000&scy=SGD
【问题讨论】:
-
您当前的输出是多少?你有任何错误吗?
-
@JonathanLam 感谢您的回复,当 url 为
www.xyz.com/zh/all-services-from-mal-to-sin/details?amount=1000&scy=SGD to www.xyz.com/hi/sabhee-sevak-ml-to-sg?amount=1000&scy=SGD时有效,但不适用于 curr_lang = en 和 prev_lang =zh , -
swapObj()是做什么的?为什么obj硬编码为hi或swapObj(hi)?这可能是您的问题的原因吗? -
@JonathanLam 更新了我的代码,请您检查一下,
swapObj会将 { "transfer-services": "sabhee sevaen" } 之类的映射反转为 { "sabhee sevaen" :"transfer-服务”} 反之亦然
标签: javascript jquery arrays object