Просмотр исходного кода

feat: 非vue文件支持多语言

菲鸽 2 лет назад
Родитель
Сommit
6376816d0b
3 измененных файлов с 31 добавлено и 1 удалено
  1. 23 1
      src/locale/index.ts
  2. 2 0
      src/pages/index/index.vue
  3. 6 0
      src/utils/http.ts

+ 23 - 1
src/locale/index.ts

@@ -9,9 +9,31 @@ const messages = {
 }
 console.log(uni.getLocale())
 
+const getLocale = () => {
+  const browserLang = uni.getLocale()
+  if (Object.keys(messages).includes(browserLang)) {
+    return browserLang
+  }
+  return 'zh' // fallback language, 可以配置,必须是 message 的key
+}
+
+console.log(getLocale())
+
 const i18n = createI18n({
-  locale: 'zh',
+  locale: getLocale(), //
   messages,
 })
 
+/**
+ * 非 vue 文件使用这个方法
+ * @param { string } localeKey 多语言的key,eg: "app.name"
+ */
+export const translate = (localeKey: string) => {
+  const locale = getLocale()
+  const message = messages[locale]
+  if (Object.keys(message).includes(localeKey)) {
+    return message[localeKey]
+  }
+  return localeKey
+}
 export default i18n

+ 2 - 0
src/pages/index/index.vue

@@ -39,6 +39,8 @@
 
 <script lang="ts" setup>
 // 获取屏幕边界到安全区域距离
+import '@/utils/http'
+
 const { safeAreaInsets } = uni.getSystemInfoSync()
 
 const author = ref('菲鸽')

+ 6 - 0
src/utils/http.ts

@@ -1,6 +1,7 @@
 /* eslint-disable no-param-reassign */
 import { useUserStore } from '@/store'
 import { UserInfo } from '@/typings'
+import { translate as t } from '@/locale/index'
 
 type Data<T> = {
   code: number
@@ -8,6 +9,11 @@ type Data<T> = {
   result: T
 }
 
+uni.showModal({
+  title: '菲鸽',
+  content: t('app.name'),
+})
+
 // 请求基地址
 const baseURL = import.meta.env.VITE_SERVER_BASEURL
 // console.log(import.meta.env)