我正在使用vue-i18n进行国际化,我这里在模板中使用了变量。但是给变量赋值后,却没有成功。
我是用的Vue3编译,使用了组合式API
请问解决了吗
回复 吃了个大香瓜: 写法不一样,我给你个示例,我项目中正在用的。
time: {
justNow: '刚刚',
minutesAgo: ({ list }) => ${list(0)}分钟前,
today: ({ list }) => 今天 ${list(0)}:${list(1)},
yesterday: ({ list }) => 昨天 ${list(0)}:${list(1)},
monthDay: ({ list }) => ${list(0)}月${list(1)}日 ${list(2)}:${list(3)},
yearMonthDay: ({ list }) => ${list(0)}年${list(1)}月${list(2)}日 ${list(3)}:${list(4)}
},
2025-05-18 13:03
回复 7***@qq.com: i18n.t('time.minutesAgo', {
minutes: Math.floor(timestampDiff / 60),
locale
});
2025-05-18 13:06
实在没有什么好的解决方案, 网上找的也是稀烂, 自己弄个凑合用用吧
import i18n from "@/locale/index.js";
const { t } = i18n.global;
export default function() {
// 由于app无法渲染 i18n的动态入参文本, 所以这里做一个转换方法
const getI18nText = (key, params = {}) => {
// 传入params是 h5能正常渲染
// h5渲染后 文本中不存在 {xxx} , 所以没做其他判断
const text = t(key, params);
console.log('Original text:', text)
let finalText = text;
// 替换参数
Object.keys(params).forEach(paramKey => {
const regex = new RegExp(`{${paramKey}}`, 'g');
console.log('Replacing', `{${paramKey}}`, 'with', params[paramKey])
finalText = finalText.replace(regex, params[paramKey]);
console.log('getI18nText:', finalText)
});
return finalText;
}
return {
getI18nText
}
}
1***@qq.com (作者)
有些国家的语言风格可不是这样的
例如:
希伯来语:הועלה 10 מ"מ
土耳其:10 mm yukarı taşındı
俄语:Перемещено вверх на 10 мм
总不能每种语言我都要看他的格式怎么书写吧
2023-08-26 11:04
kasnti
回复 1***@qq.com: 我写了一个思路,可以参考看下 https://www.cnblogs.com/kasnti/p/18148455
2024-04-21 00:51