update formatters
This commit is contained in:
parent
8ae7b68083
commit
73794587c3
@ -319,12 +319,10 @@ function executeChecker(checker,value){
|
||||
function executeFormatter(value,formatters,scope,template){
|
||||
if(formatters.length===0) return value
|
||||
let result = value
|
||||
|
||||
const emptyChecker = formatters.find(func=>func.$name==='empty')
|
||||
const errorChecker = formatters.find(func=>func.$name==='error')
|
||||
|
||||
// 1. 空值检查
|
||||
if(emptyChecker){
|
||||
const emptyCheckerIndex = formatters.findIndex(func=>func.$name==='empty')
|
||||
if(emptyCheckerIndex!=-1){
|
||||
const emptyChecker = formatters.splice(emptyCheckerIndex,1)[0]
|
||||
const { value,next } = executeChecker(emptyChecker,result)
|
||||
if(next == 'break') {
|
||||
return value
|
||||
@ -333,15 +331,21 @@ function executeFormatter(value,formatters,scope,template){
|
||||
}
|
||||
}
|
||||
// 2. 错误检查
|
||||
if((result instanceof Error) && errorChecker){
|
||||
result.formatter = formatter.$name
|
||||
const { value,next } = executeChecker(emptyChecker,result)
|
||||
if(next == 'break') {
|
||||
return value
|
||||
}else{
|
||||
result = value
|
||||
}
|
||||
const errorCheckerIndex = formatters.findIndex(func=>func.$name==='error')
|
||||
let errorChecker
|
||||
if(errorCheckerIndex!=-1){
|
||||
errorChecker = formatters.splice(errorCheckerIndex,1)[0]
|
||||
if(result instanceof Error){
|
||||
result.formatter = formatter.$name
|
||||
const { value,next } = executeChecker(errorChecker,result)
|
||||
if(next == 'break') {
|
||||
return value
|
||||
}else{
|
||||
result = value
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// 3. 分别执行格式化器函数
|
||||
for(let formatter of formatters){
|
||||
try{
|
||||
@ -349,12 +353,14 @@ function executeFormatter(value,formatters,scope,template){
|
||||
}catch(e){
|
||||
e.formatter = formatter.$name
|
||||
if(scope.debug) console.error(`Error while execute i18n formatter<${formatter.$name}> for ${template}: ${e.message} ` )
|
||||
const { value,next } = executeChecker(errorChecker,result)
|
||||
if(next=="break"){
|
||||
if(value!==undefined) result = value
|
||||
break
|
||||
}else if(next=="skip"){
|
||||
continue
|
||||
if(isFunction(errorChecker)){
|
||||
const { value,next } = executeChecker(errorChecker,result)
|
||||
if(next=="break"){
|
||||
if(value!==undefined) result = value
|
||||
break
|
||||
}else if(next=="skip"){
|
||||
continue
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -406,7 +412,7 @@ function wrapperFormatters(scope,activeLanguage,formatters){
|
||||
// 格式化器无效或者没有定义时,查看当前值是否具有同名的原型方法,如果有则执行调用
|
||||
// 比如padStart格式化器是String的原型方法,不需要配置就可以直接作为格式化器调用
|
||||
if(!isFunction(fn)){
|
||||
fn = (value,...args) =>{
|
||||
fn = (value) =>{
|
||||
if(isFunction(value[name])){
|
||||
return value[name](...args)
|
||||
}else{
|
||||
|
@ -179,12 +179,12 @@ test("位置插值翻译文本内容",async ()=>{
|
||||
expect(t("1")).toBe("你好");
|
||||
expect(t("2",now)).toBe(`现在是${dayjs(now).format('YYYY年MM月DD日 HH点mm分ss秒')}`);
|
||||
|
||||
await scope.change("en")
|
||||
.eixt
|
||||
await scope.change("en")
|
||||
|
||||
expect(t("你好")).toBe("hello");
|
||||
expect(t("现在是{}",now)).toBe(`Now is ${dayjs(now).format('YYYY-MM-DD HH:mm:ss')}`);
|
||||
expect(t("现在是{}",now)).toBe(`Now is ${dayjs(now).format('YYYY/MM/DD HH:mm:ss')}`);
|
||||
expect(t("1")).toBe("hello");
|
||||
expect(t("2",now)).toBe(`Now is ${dayjs(now).format('YYYY-MM-DD HH:mm:ss')}`);
|
||||
expect(t("2",now)).toBe(`Now is ${dayjs(now).format('YYYY/MM/DD HH:mm:ss')}`);
|
||||
})
|
||||
|
||||
test("命名插值翻译文本内容",async ()=>{
|
||||
@ -194,10 +194,9 @@ test("命名插值翻译文本内容",async ()=>{
|
||||
|
||||
await scope.change("en")
|
||||
expect(t("你好")).toBe("hello");
|
||||
expect(t("现在是{}",now)).toBe(`Now is ${dayjs(now).format('YYYY-MM-DD HH:mm:ss')}`);
|
||||
expect(t("现在是{}",now)).toBe(`Now is ${dayjs(now).format('YYYY/MM/DD HH:mm:ss')}`);
|
||||
expect(t("1")).toBe("hello");
|
||||
expect(t("2",now)).toBe(`Now is ${dayjs(now).format('YYYY-MM-DD HH:mm:ss')}`);
|
||||
done()
|
||||
expect(t("2",now)).toBe(`Now is ${dayjs(now).format('YYYY/MM/DD HH:mm:ss')}`);
|
||||
})
|
||||
|
||||
|
||||
@ -222,6 +221,5 @@ test("翻译复数支持",async ()=>{
|
||||
expect(t("我有{}个朋友",2)).toBe("I have two friends");
|
||||
expect(t("我有{}个朋友",3)).toBe("I have 3 friends");
|
||||
expect(t("我有{}个朋友",4)).toBe("I have 4 friends");
|
||||
done()
|
||||
})
|
||||
|
Loading…
x
Reference in New Issue
Block a user