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