fengchang_fight 1 سال پیش
والد
کامیت
ab8884fd6e

+ 2 - 0
hichina-main-front-mobile-first/package.json

@@ -23,6 +23,7 @@
     "quill-image-uploader": "^1.3.0",
     "unhead": "^1.1.30",
     "vue": "^3.0.0",
+    "vue-i18n": "^9.3.0-beta.24",
     "vue-image-crop-upload": "^3.0.3",
     "vue-json-pretty": "^2.2.4",
     "vue-router": "^4.0.0",
@@ -31,6 +32,7 @@
   },
   "devDependencies": {
     "@babel/eslint-parser": "^7.13.14",
+    "@intlify/vue-i18n-loader": "^4.2.0",
     "@quasar/app-webpack": "^3.0.0",
     "eslint": "^8.10.0",
     "eslint-config-prettier": "^8.1.0",

+ 17 - 1
hichina-main-front-mobile-first/quasar.config.js

@@ -11,6 +11,8 @@ const ESLintPlugin = require("eslint-webpack-plugin");
 
 const { configure } = require("quasar/wrappers");
 
+const path = require("node:path");
+
 module.exports = configure(function (ctx) {
   return {
     // https://v2.quasar.dev/quasar-cli-webpack/supporting-ts
@@ -22,7 +24,7 @@ module.exports = configure(function (ctx) {
     // app boot file (/src/boot)
     // --> boot files are part of "main.js"
     // https://v2.quasar.dev/quasar-cli-webpack/boot-files
-    boot: ["axios", "globalMixin"],
+    boot: ["i18n", "axios", "globalMixin"],
 
     // https://v2.quasar.dev/quasar-cli-webpack/quasar-config-js#Property%3A-css
     css: ["app.scss"],
@@ -70,6 +72,20 @@ module.exports = configure(function (ctx) {
         chain
           .plugin("eslint-webpack-plugin")
           .use(ESLintPlugin, [{ extensions: ["js", "vue"] }]);
+        chain.module
+          .rule("i18n-resource")
+          .test(/\.(json5?|ya?ml)$/)
+          .include.add(path.resolve(__dirname, "./src/i18n"))
+          .end()
+          .type("javascript/auto")
+          .use("i18n-resource")
+          .loader("@intlify/vue-i18n-loader");
+        chain.module
+          .rule("i18n")
+          .resourceQuery(/blockType=i18n/)
+          .type("javascript/auto")
+          .use("i18n")
+          .loader("@intlify/vue-i18n-loader");
       },
     },
 

+ 1 - 0
hichina-main-front-mobile-first/src/boot/globalMixin.js

@@ -1,5 +1,6 @@
 import { boot } from "quasar/wrappers";
 import vueCountryRegionSelect from "vue3-country-region-select";
+
 // "async" is optional;
 // more info on params: https://v2.quasar.dev/quasar-cli/boot-files
 export default boot(async (/* { app, router, ... } */ { app, router }) => {

+ 16 - 0
hichina-main-front-mobile-first/src/boot/i18n.js

@@ -0,0 +1,16 @@
+import { createI18n } from "vue-i18n";
+import messages from "src/i18n";
+import { boot } from "quasar/wrappers";
+
+export default boot(({ app }) => {
+  // Create I18n instance
+  const i18n = createI18n({
+    locale: "en-US",
+    globalInjection: true,
+    legacy: false,
+    messages,
+  });
+
+  // Tell app to use the I18n instance
+  app.use(i18n);
+});

+ 36 - 0
hichina-main-front-mobile-first/src/i18n/en-US/index.js

@@ -0,0 +1,36 @@
+// This is just an example,
+// so you can safely delete all default props below
+
+export default {
+  register: "Register",
+  login: "Login",
+  logout: "Logout",
+  edit_profile: "Edit Profile",
+  my_orders: "My Orders",
+  my_blogs: "My Blogs",
+  language: "Language",
+  guidebooks: "GuideBooks",
+  blogs_vlogs: "Blogs/Vlogs",
+  travel_shop: "Travel Shop",
+  destinations: "Destinations",
+  more_destinations: "More Destinations",
+  places_in_china: "Places to go in China",
+  tailor_made_trip: "Want a Tailor Made Trip to China? Click Here for Help",
+  people_are_traveling: "People are traveling",
+  whats_in_china: "What's in China",
+  latest_guidebooks: "Latest Guidebooks",
+  most_downloaded_guidebooks: "Most Downloaded Guidebooks",
+  blogs_of_the_week: "Blogs of The Week",
+  write_your_blog: "Write your blog",
+  latest_blogs: "Latest blogs",
+  most_viewed_in_month: "Most viewed in a month",
+  blogers_m_following: "Bloggers I'm following",
+  group_tour: "Group tour",
+  hotel_deals: "Hotel deals",
+  flight_deals: "Flight deals",
+  holiday_package: "Holiday package",
+  china_stuff: "China stuff",
+  search_by_title: "Search by title",
+  deals_for_you: "Deals for you",
+  seasonal_recommendation: "Seasonal Recommendation",
+};

+ 11 - 0
hichina-main-front-mobile-first/src/i18n/index.js

@@ -0,0 +1,11 @@
+import enUS from "./en-US";
+import thTH from "./th-TH";
+import koKR from "./ko-KR";
+import ruRU from "./ru-RU";
+
+export default {
+  "en-US": enUS,
+  "th-TH": thTH,
+  "ko-KR": koKR,
+  "ru-RU": ruRU,
+};

+ 37 - 0
hichina-main-front-mobile-first/src/i18n/ko-KR/index.js

@@ -0,0 +1,37 @@
+// This is just an example,
+// so you can safely delete all default props below
+
+export default {
+  register: "등록하다",
+  login: "로그인",
+  logout: "로그 아웃",
+  edit_profile: "프로필 수정",
+  my_orders: "내 주문",
+  my_blogs: "내 블로그",
+  language: "언어",
+  guidebooks: "가이드북",
+  blogs_vlogs: "블로그/브이로그",
+  travel_shop: "트래블 샵",
+  destinations: "목적지",
+  more_destinations: "더 많은 목적지",
+  places_in_china: "중국에서 갈 장소",
+  tailor_made_trip:
+    "맞춤형 중국 여행을 원하십니까? 도움말을 보려면 여기를 클릭하세요.",
+  people_are_traveling: "사람들이 여행하고 있다",
+  whats_in_china: "중국에 있는 것",
+  latest_guidebooks: "최신 가이드북",
+  most_downloaded_guidebooks: "가장 많이 다운로드된 가이드북",
+  blogs_of_the_week: "금주의 블로그",
+  write_your_blog: "블로그 작성",
+  latest_blogs: "최신 블로그",
+  most_viewed_in_month: "한 달 동안 가장 많이 본",
+  blogers_m_following: "내가 팔로우하는 블로거",
+  group_tour: "단체관광",
+  hotel_deals: "호텔 상품",
+  flight_deals: "항공편 특가",
+  holiday_package: "홀리데이 패키지",
+  china_stuff: "중국 물건",
+  search_by_title: "제목으로 검색",
+  deals_for_you: "당신을 위한 거래",
+  seasonal_recommendation: "계절 추천",
+};

+ 37 - 0
hichina-main-front-mobile-first/src/i18n/ru-RU/index.js

@@ -0,0 +1,37 @@
+// This is just an example,
+// so you can safely delete all default props below
+
+export default {
+  register: "регистр",
+  login: "Авторизоваться",
+  logout: "Выйти",
+  edit_profile: "Редактировать профиль",
+  my_orders: "мои заказы",
+  my_blogs: "Мои блоги",
+  language: "Язык",
+  guidebooks: "Путеводители",
+  blogs_vlogs: "Блоги/Влоги",
+  travel_shop: "Туристический магазин",
+  destinations: "Направления",
+  more_destinations: "Больше направлений",
+  places_in_china: "Куда сходить в Китае",
+  tailor_made_trip:
+    "Хотите индивидуальное путешествие в Китай? Нажмите здесь, чтобы получить помощь",
+  people_are_traveling: "Люди путешествуют",
+  whats_in_china: "Что в Китае",
+  latest_guidebooks: "Последние путеводители",
+  most_downloaded_guidebooks: "Самые скачиваемые путеводители",
+  blogs_of_the_week: "Блоги недели",
+  write_your_blog: "Напишите свой блог",
+  latest_blogs: "Последние блоги",
+  most_viewed_in_month: "Самые просматриваемые за месяц",
+  blogers_m_following: "Блоггеры, на которых я подписан",
+  group_tour: "Групповой тур",
+  hotel_deals: "Предложения от отелей",
+  flight_deals: "Авиабилеты",
+  holiday_package: "Праздничный пакет",
+  china_stuff: "Китайские вещи",
+  search_by_title: "Поиск по названию",
+  deals_for_you: "Предложения для вас",
+  seasonal_recommendation: "Seasonal Recommendation",
+};

+ 37 - 0
hichina-main-front-mobile-first/src/i18n/th-TH/index.js

@@ -0,0 +1,37 @@
+// This is just an example,
+// so you can safely delete all default props below
+
+export default {
+  register: "ลงทะเบียน",
+  login: "เข้าสู่ระบบ",
+  logout: "ออกจากระบบ",
+  edit_profile: "แก้ไขโปรไฟล์",
+  my_orders: "คำสั่งของฉัน",
+  my_blogs: "บล็อกของฉัน",
+  language: "ภาษา",
+  guidebooks: "หนังสือคู่มือ",
+  blogs_vlogs: "บล็อก/วิดีโอบล็อก",
+  travel_shop: "ร้านท่องเที่ยว",
+  destinations: "จุดหมายปลายทาง",
+  more_destinations: "จุดหมายปลายทางเพิ่มเติม",
+  places_in_china: "สถานที่น่าไปในจีน",
+  tailor_made_trip:
+    "ต้องการทริปสั่งตัดไปยังประเทศจีนหรือไม่? คลิกที่นี่เพื่อขอความช่วยเหลือ",
+  people_are_traveling: "ผู้คนกำลังเดินทาง",
+  whats_in_china: "อะไรในประเทศจีน",
+  latest_guidebooks: "คู่มือล่าสุด",
+  most_downloaded_guidebooks: "คู่มือแนะนำที่ดาวน์โหลดมากที่สุด",
+  blogs_of_the_week: "บล็อกประจำสัปดาห์",
+  write_your_blog: "เขียนบล็อกของคุณ",
+  latest_blogs: "บล็อกล่าสุด",
+  most_viewed_in_month: "เข้าชมมากที่สุดในรอบเดือน",
+  blogers_m_following: "บล็อกเกอร์ที่ฉันติดตาม",
+  group_tour: "กรุ๊ปทัวร์",
+  hotel_deals: "ข้อเสนอโรงแรม",
+  flight_deals: "ข้อเสนอเที่ยวบิน",
+  holiday_package: "แพ็คเกจวันหยุด",
+  china_stuff: "ของจีน",
+  search_by_title: "ค้นหาตามชื่อเรื่อง",
+  deals_for_you: "ข้อเสนอสำหรับคุณ",
+  seasonal_recommendation: "คำแนะนำตามฤดูกาล",
+};

+ 58 - 22
hichina-main-front-mobile-first/src/layouts/MainLayout.vue

@@ -21,7 +21,7 @@
           class="q-ml-xl"
           v-if="$q.screen.gt.xs"
         >
-          GuideBooks
+          {{ $t("guidebooks") }}
         </q-btn>
         <q-btn
           @click="goPage('/blog')"
@@ -31,7 +31,7 @@
           class="q-ml-sm"
           v-if="$q.screen.gt.xs"
         >
-          Blogs/Vlogs
+          {{ $t("blogs_vlogs") }}
         </q-btn>
         <q-btn
           @click="goPage('/product')"
@@ -41,7 +41,7 @@
           class="q-ml-sm"
           v-if="$q.screen.gt.xs"
         >
-          Travel Shop
+          {{ $t("travel_shop") }}
         </q-btn>
         <q-btn
           @click="goPage('/destination')"
@@ -51,12 +51,27 @@
           class="q-ml-sm"
           v-if="$q.screen.gt.xs"
         >
-          Destinations
+          {{ $t("destinations") }}
         </q-btn>
 
         <!-- this is the trick -->
         <q-space />
 
+        <div class="row no-wrap q-mr-md">
+          <q-select
+            v-model="locale"
+            :options="localeOptions"
+            :label="$t('language')"
+            dense
+            emit-value
+            map-options
+            options-dense
+            style="min-width: 150px"
+            @click="setLanguage"
+            ><template v-slot:append> <q-icon name="public" /> </template
+          ></q-select>
+        </div>
+
         <div v-if="currentUser === ''" class="row no-wrap">
           <q-btn
             @click="goPage('/auth/register')"
@@ -65,8 +80,8 @@
             no-wrap
             no-caps
             color="primary"
-            label="Register"
-            class="q-mr-lg"
+            :label="$t('register')"
+            class="q-mr-md"
             v-if="$q.screen.gt.xs"
           />
           <q-btn
@@ -76,7 +91,7 @@
             no-wrap
             no-caps
             color="primary"
-            label="Login"
+            :label="$t('login')"
             class="q-mr-sm"
             v-if="$q.screen.gt.xs"
           />
@@ -103,17 +118,17 @@
             >
               <q-list dense class="text-grey-9 text-caption">
                 <q-item clickable @click="goPage('/my-blogs')">
-                  <q-item-section>My Blogs</q-item-section>
+                  <q-item-section>{{ $t("my_blogs") }}</q-item-section>
                 </q-item>
                 <q-item clickable @click="goPage('/my-orders')">
-                  <q-item-section>My Orders</q-item-section>
+                  <q-item-section>{{ $t("my_orders") }}</q-item-section>
                 </q-item>
                 <q-item clickable @click="goPage('/user-info')">
-                  <q-item-section>Edit Profile</q-item-section>
+                  <q-item-section>{{ $t("edit_profile") }}</q-item-section>
                 </q-item>
                 <q-separator />
                 <q-item clickable @click="logout()">
-                  <q-item-section>Logout</q-item-section>
+                  <q-item-section>{{ $t("logout") }}</q-item-section>
                 </q-item>
               </q-list>
             </q-menu>
@@ -153,7 +168,7 @@
               <q-icon color="grey" name="fingerprint" />
             </q-item-section>
             <q-item-section>
-              <q-item-label>GuideBooks</q-item-label>
+              <q-item-label>{{ $t("guidebooks") }}</q-item-label>
             </q-item-section>
           </q-item>
           <q-item v-ripple clickable @click="goPage('/blog')">
@@ -161,7 +176,7 @@
               <q-icon color="grey" name="fingerprint" />
             </q-item-section>
             <q-item-section>
-              <q-item-label>Blogs/Vlogs</q-item-label>
+              <q-item-label>{{ $t("blogs_vlogs") }}</q-item-label>
             </q-item-section>
           </q-item>
           <q-item v-ripple clickable @click="goPage('/product')">
@@ -169,7 +184,7 @@
               <q-icon color="grey" name="fingerprint" />
             </q-item-section>
             <q-item-section>
-              <q-item-label>Travel Shop</q-item-label>
+              <q-item-label>{{ $t("travel_shop") }}</q-item-label>
             </q-item-section>
           </q-item>
           <q-item v-ripple clickable @click="goPage('/destination')">
@@ -177,7 +192,7 @@
               <q-icon color="grey" name="fingerprint" />
             </q-item-section>
             <q-item-section>
-              <q-item-label>Destinations</q-item-label>
+              <q-item-label>{{ $t("destinations") }}</q-item-label>
             </q-item-section>
           </q-item>
 
@@ -193,7 +208,7 @@
               <q-icon color="grey" name="login" />
             </q-item-section>
             <q-item-section>
-              <q-item-label>Login</q-item-label>
+              <q-item-label>{{ $t("login") }}</q-item-label>
             </q-item-section>
           </q-item>
           <q-item
@@ -206,7 +221,7 @@
               <q-icon color="grey" name="account_circle" />
             </q-item-section>
             <q-item-section>
-              <q-item-label>Register</q-item-label>
+              <q-item-label>{{ $t("register") }}</q-item-label>
             </q-item-section>
           </q-item>
           <q-item
@@ -219,7 +234,7 @@
               <q-icon color="grey" name="rss_feed" />
             </q-item-section>
             <q-item-section>
-              <q-item-label>My Blogs</q-item-label>
+              <q-item-label>{{ $t("my_blogs") }}</q-item-label>
             </q-item-section>
           </q-item>
           <q-item
@@ -232,7 +247,7 @@
               <q-icon color="grey" name="list_alt" />
             </q-item-section>
             <q-item-section>
-              <q-item-label>My Orders</q-item-label>
+              <q-item-label>{{ $t("my_orders") }}</q-item-label>
             </q-item-section>
           </q-item>
           <q-item
@@ -245,7 +260,7 @@
               <q-icon color="grey" name="manage_accounts" />
             </q-item-section>
             <q-item-section>
-              <q-item-label>Edit Profile</q-item-label>
+              <q-item-label>{{ $t("edit_profile") }}</q-item-label>
             </q-item-section>
           </q-item>
           <q-item
@@ -258,7 +273,7 @@
               <q-icon color="grey" name="logout" />
             </q-item-section>
             <q-item-section>
-              <q-item-label>Logout</q-item-label>
+              <q-item-label>{{ $t("logout") }}</q-item-label>
             </q-item-section>
           </q-item>
         </q-list>
@@ -340,8 +355,10 @@
 </template>
 
 <script>
-import { defineComponent, onMounted, ref } from "vue";
+import { defineComponent, onMounted, ref, getCurrentInstance } from "vue";
 import { api } from "boot/axios";
+import { useI18n } from "vue-i18n";
+import { useQuasar } from "quasar";
 
 export default defineComponent({
   name: "MainLayout",
@@ -349,10 +366,21 @@ export default defineComponent({
   components: {},
 
   setup() {
+    const { locale } = useI18n({ useScope: "global" });
+
     const leftDrawerOpen = ref(false);
     const currentUser = ref("");
     const currentProfileImage = ref("");
 
+    const instance = getCurrentInstance();
+    const app = instance.appContext.app;
+    const gp = app.config.globalProperties;
+    const $q = useQuasar();
+
+    function setLanguage() {
+      $q.lang.set(locale);
+    }
+
     function whoami() {
       api
         .get("/api/v1/user/whoamiv2")
@@ -397,6 +425,14 @@ export default defineComponent({
       whoami();
     });
     return {
+      setLanguage,
+      locale,
+      localeOptions: [
+        { value: "en-US", label: "English" },
+        { value: "th-TH", label: "แบบไทย" },
+        { value: "ko-KR", label: "한국인" },
+        { value: "ru-RU", label: "Русский" },
+      ],
       leftDrawerOpen,
       currentUser,
       currentProfileImage,

+ 13 - 6
hichina-main-front-mobile-first/src/pages/BlogPage.vue

@@ -3,7 +3,7 @@
     <div
       class="row justify-center text-h4 text-weight-bold text-blue-6 q-mt-md"
     >
-      Blogs of The Week
+      {{ $t("blogs_of_the_week") }}
     </div>
     <div class="q-pa-md">
       <q-carousel
@@ -45,15 +45,23 @@
         color="primary"
         size="xl"
         @click="goPage('/blog-create')"
-        label="Write your blog"
+        :label="$t('write_your_blog')"
       />
     </div>
     <div class="row q-pa-md">
       <div class="q-gutter-y-md col-12 col-md-8">
         <q-tabs v-model="tab" dense align="justify" class="text-primary">
-          <q-tab :ripple="false" name="lb" label="Latest Blogs" />
-          <q-tab :ripple="false" name="mvm" label="Most Viewed in a Month" />
-          <q-tab :ripple="false" name="bfl" label="Bloggers I'm following" />
+          <q-tab :ripple="false" name="lb" :label="$t('latest_blogs')" />
+          <q-tab
+            :ripple="false"
+            name="mvm"
+            :label="$t('most_viewed_in_month')"
+          />
+          <q-tab
+            :ripple="false"
+            name="bfl"
+            :label="$t('blogers_m_following')"
+          />
         </q-tabs>
       </div>
     </div>
@@ -210,4 +218,3 @@ export default {
   padding: 12px
   color: white
 </style>
-

+ 2 - 2
hichina-main-front-mobile-first/src/pages/DestinationPage.vue

@@ -1,7 +1,7 @@
 <template>
   <q-page>
     <div class="row justify-center text-blue-6 text-h4 q-pt-xl">
-      Seasonal Recommendation
+      {{ $t("seasonal_recommendation") }}
     </div>
     <div class="row justify-center q-mt-md">
       <q-input
@@ -11,7 +11,7 @@
         outlined
         v-model="query"
         @update:model-value="(val) => updateQuery(val)"
-        label="Search by title"
+        :label="$t('search_by_title')"
       />
     </div>
     <div class="row justify-left">

+ 2 - 2
hichina-main-front-mobile-first/src/pages/GuideIntroPage.vue

@@ -28,11 +28,11 @@
     <div class="row q-pa-md">
       <div class="q-gutter-y-md col-12 col-md-6">
         <q-tabs v-model="tab" dense align="justify" class="text-primary">
-          <q-tab :ripple="false" name="lg" label="Latest Guidebooks" />
+          <q-tab :ripple="false" name="lg" :label="$t('latest_guidebooks')" />
           <q-tab
             :ripple="false"
             name="mdg"
-            label="Most Downloaded Guidebooks"
+            :label="$t('most_downloaded_guidebooks')"
           />
         </q-tabs>
       </div>

+ 10 - 6
hichina-main-front-mobile-first/src/pages/IndexPage.vue

@@ -32,17 +32,21 @@
     </div>
     <div class="q-pa-md" style="height: 40px"></div>
     <div class="row">
-      <div class="col-6 col-md-2 text-blue-6 text-h4 q-pl-md">Destinations</div>
+      <div class="col-6 col-md-2 text-blue-6 text-h4 q-pl-md">
+        {{ $t("destinations") }}
+      </div>
       <div class="col-md-8"></div>
       <div
         @click="goPage('/destination')"
         class="col-6 col-md-2 text-blue-6 cursor-pointer"
       >
-        More destinations >
+        {{ $t("more_destinations") }} >
       </div>
     </div>
     <div class="row">
-      <div class="text-h3 q-pl-md q-mt-md">Places to go in China!</div>
+      <div class="text-h3 q-pl-md q-mt-md">
+        {{ $t("places_in_china") + "!" }}
+      </div>
     </div>
     <div class="row justify-center">
       <div
@@ -86,7 +90,7 @@
             border: 1px solid black;
           "
         >
-          Want a Tailor Made Trip to China? Click Here for Help
+          {{ $t("tailor_made_trip") }}
         </div>
         <div
           v-if="!$q.screen.gt.xs"
@@ -117,12 +121,12 @@
     </div>
     <div class="row">
       <div class="text-h5 text-weight-bold text-blue-6 q-pl-md q-mt-md">
-        People are traveling!
+        {{ $t("people_are_traveling") + "!" }}
       </div>
     </div>
     <div class="row">
       <div class="text-h3 text-weight-medium q-pl-md q-mt-md">
-        What's in China!
+        {{ $t("whats_in_china") + "!" }}
       </div>
     </div>
     <div class="row justify-left">

+ 12 - 10
hichina-main-front-mobile-first/src/pages/TravelShopPage.vue

@@ -20,7 +20,7 @@
           outlined
           v-model="query"
           @update:model-value="(val) => updateQuery(val)"
-          label="Search by title"
+          :label="$t('search_by_title')"
         />
       </div>
       <q-btn-toggle
@@ -36,21 +36,25 @@
         v-model="btnToggle"
         toggle-color="primary"
         :options="[
-          { label: 'Group Tour', value: 'groupTour', icon: 'group' },
-          { label: 'Hotel Deals', value: 'hotelDeals', icon: 'business' },
-          { label: 'Flight Deals', value: 'flightDeals', icon: 'flight' },
+          { label: $t('group_tour'), value: 'groupTour', icon: 'group' },
+          { label: $t('hotel_deals'), value: 'hotelDeals', icon: 'business' },
+          { label: $t('flight_deals'), value: 'flightDeals', icon: 'flight' },
           {
-            label: 'Holiday Package',
+            label: $t('holiday_package'),
             value: 'holidayPackage',
             icon: 'beach_access',
           },
-          { label: 'China Stuff', value: 'chinaStuff', icon: 'shopping_cart' },
+          {
+            label: $t('china_stuff'),
+            value: 'chinaStuff',
+            icon: 'shopping_cart',
+          },
         ]"
       />
     </div>
     <div class="row" style="height: 50px"></div>
     <div class="row justify-center text-blue text-h4 q-mt-xl">
-      Deals for you
+      {{ $t("deals_for_you") }}
     </div>
     <div class="row justify-left">
       <div
@@ -217,6 +221,4 @@ export default {
   },
 };
 </script>
-<style lang="sass" scoped>
-</style>
-
+<style lang="sass" scoped></style>

+ 120 - 4
hichina-main-front-mobile-first/yarn.lock

@@ -1117,6 +1117,17 @@
   resolved "https://registry.yarnpkg.com/@humanwhocodes/object-schema/-/object-schema-1.2.1.tgz#b520529ec21d8e5945a1851dfd1c32e94e39ff45"
   integrity sha512-ZnQMnLV4e7hDlUvw8H+U8ASL02SS2Gn6+9Ac3wGGLIe7+je2AeAOxPY+izIPJDfFDb7eDjev0Us8MO1iFRN8hA==
 
+"@intlify/bundle-utils@^2.2.2":
+  version "2.2.2"
+  resolved "https://registry.yarnpkg.com/@intlify/bundle-utils/-/bundle-utils-2.2.2.tgz#fe65ce2549a73b99b75f3e66209d741b4f4d61fd"
+  integrity sha512-vngkvlIVV8ZJoyC5VqMvqJd2nvsx+qMN7pQjPiPjOrVndeiR7Dlue0k86Q8FsFUzyksW3HJZZi833ldxwbFzTA==
+  dependencies:
+    "@intlify/message-compiler" "^9.1.0"
+    "@intlify/shared" "^9.1.0"
+    jsonc-eslint-parser "^1.0.1"
+    source-map "^0.6.1"
+    yaml-eslint-parser "^0.3.2"
+
 "@intlify/core-base@9.2.2":
   version "9.2.2"
   resolved "https://registry.yarnpkg.com/@intlify/core-base/-/core-base-9.2.2.tgz#5353369b05cc9fe35cab95fe20afeb8a4481f939"
@@ -1127,6 +1138,16 @@
     "@intlify/shared" "9.2.2"
     "@intlify/vue-devtools" "9.2.2"
 
+"@intlify/core-base@9.3.0-beta.24":
+  version "9.3.0-beta.24"
+  resolved "https://registry.yarnpkg.com/@intlify/core-base/-/core-base-9.3.0-beta.24.tgz#6196fa885409a4880382bede2c5c7d70cb90fd9b"
+  integrity sha512-2R03Swr6pmu3jBCYxCCpHAnuqLpyQZNfQR/Csf9OJBRAFUMvbK6/hqZszQJfEMG8OIyWWSinA4JscvpkDHvEWw==
+  dependencies:
+    "@intlify/devtools-if" "9.3.0-beta.24"
+    "@intlify/message-compiler" "9.3.0-beta.24"
+    "@intlify/shared" "9.3.0-beta.24"
+    "@intlify/vue-devtools" "9.3.0-beta.24"
+
 "@intlify/devtools-if@9.2.2":
   version "9.2.2"
   resolved "https://registry.yarnpkg.com/@intlify/devtools-if/-/devtools-if-9.2.2.tgz#b13d9ac4b4e2fe6d2e7daa556517a8061fe8bd39"
@@ -1134,7 +1155,14 @@
   dependencies:
     "@intlify/shared" "9.2.2"
 
-"@intlify/message-compiler@9.2.2":
+"@intlify/devtools-if@9.3.0-beta.24":
+  version "9.3.0-beta.24"
+  resolved "https://registry.yarnpkg.com/@intlify/devtools-if/-/devtools-if-9.3.0-beta.24.tgz#028ee9832d6877563b38b6a7526cbf4743ebfe03"
+  integrity sha512-ZpVMduLgOD5DLByBWUSUph3c98kSiiWupRFTsBEDHTZlH80ypyhjH4c3JzVv4ppEH1TRqY/cP3svfee1FFi79w==
+  dependencies:
+    "@intlify/shared" "9.3.0-beta.24"
+
+"@intlify/message-compiler@9.2.2", "@intlify/message-compiler@^9.1.0":
   version "9.2.2"
   resolved "https://registry.yarnpkg.com/@intlify/message-compiler/-/message-compiler-9.2.2.tgz#e42ab6939b8ae5b3d21faf6a44045667a18bba1c"
   integrity sha512-IUrQW7byAKN2fMBe8z6sK6riG1pue95e5jfokn8hA5Q3Bqy4MBJ5lJAofUsawQJYHeoPJ7svMDyBaVJ4d0GTtA==
@@ -1142,11 +1170,24 @@
     "@intlify/shared" "9.2.2"
     source-map "0.6.1"
 
-"@intlify/shared@9.2.2":
+"@intlify/message-compiler@9.3.0-beta.24":
+  version "9.3.0-beta.24"
+  resolved "https://registry.yarnpkg.com/@intlify/message-compiler/-/message-compiler-9.3.0-beta.24.tgz#0f1e2cbc4ac223be67b61dbaaac0d9eac8b0decb"
+  integrity sha512-prhHATkgp0mpPqoVgiAtLmUc1JMvs8fMH6w53AVEBn+VF87dLhzanfmWY5FoZWORG51ag54gBDBOoM/VFv3m3A==
+  dependencies:
+    "@intlify/shared" "9.3.0-beta.24"
+    source-map-js "^1.0.2"
+
+"@intlify/shared@9.2.2", "@intlify/shared@^9.1.0":
   version "9.2.2"
   resolved "https://registry.yarnpkg.com/@intlify/shared/-/shared-9.2.2.tgz#5011be9ca2b4ab86f8660739286e2707f9abb4a5"
   integrity sha512-wRwTpsslgZS5HNyM7uDQYZtxnbI12aGiBZURX3BTR9RFIKKRWpllTsgzHWvj3HKm3Y2Sh5LPC1r0PDCKEhVn9Q==
 
+"@intlify/shared@9.3.0-beta.24":
+  version "9.3.0-beta.24"
+  resolved "https://registry.yarnpkg.com/@intlify/shared/-/shared-9.3.0-beta.24.tgz#23e08af9fc904fe3ef896786f9e659da6bb567b5"
+  integrity sha512-AKxJ8s7eKIQWkNaf4wyyoLRwf4puCuQgjSChlDJm5JBEt6T8HGgnYTJLRXu6LD/JACn3Qwu6hM/XRX1c9yvjmQ==
+
 "@intlify/vue-devtools@9.2.2":
   version "9.2.2"
   resolved "https://registry.yarnpkg.com/@intlify/vue-devtools/-/vue-devtools-9.2.2.tgz#b95701556daf7ebb3a2d45aa3ae9e6415aed8317"
@@ -1155,6 +1196,25 @@
     "@intlify/core-base" "9.2.2"
     "@intlify/shared" "9.2.2"
 
+"@intlify/vue-devtools@9.3.0-beta.24":
+  version "9.3.0-beta.24"
+  resolved "https://registry.yarnpkg.com/@intlify/vue-devtools/-/vue-devtools-9.3.0-beta.24.tgz#2f1cbc03b240720ca21229f06ebb659c42ce4e8e"
+  integrity sha512-ACK+FnGCYEP+d4NVTp/G+ldnZk49kwl7iNKsxBVr31NzzdUd/2m4ANFsuvDSvIYzzIGrDggJFNC+ON4Rl7mm1A==
+  dependencies:
+    "@intlify/core-base" "9.3.0-beta.24"
+    "@intlify/shared" "9.3.0-beta.24"
+
+"@intlify/vue-i18n-loader@^4.2.0":
+  version "4.2.0"
+  resolved "https://registry.yarnpkg.com/@intlify/vue-i18n-loader/-/vue-i18n-loader-4.2.0.tgz#d7474e865721478f3754639963cf617bba825d62"
+  integrity sha512-d7aBmMNWJskcZPT5rJH4h2XHe/PwNoJUaY0PGla9g+NSD4B0UR8LBKrp126nlaUfA74Xt0FEGvzCfG9KdC9KoA==
+  dependencies:
+    "@intlify/bundle-utils" "^2.2.2"
+    "@intlify/shared" "^9.1.0"
+    js-yaml "^4.1.0"
+    json5 "^2.2.0"
+    loader-utils "^2.0.0"
+
 "@jest/schemas@^29.4.3":
   version "29.4.3"
   resolved "https://registry.yarnpkg.com/@jest/schemas/-/schemas-29.4.3.tgz#39cf1b8469afc40b6f5a2baaa146e332c4151788"
@@ -1896,7 +1956,7 @@ acorn-import-assertions@^1.9.0:
   resolved "https://registry.yarnpkg.com/acorn-import-assertions/-/acorn-import-assertions-1.9.0.tgz#507276249d684797c84e0734ef84860334cfb1ac"
   integrity sha512-cmMwop9x+8KFhxvKrKfPYmN6/pKTYYHBqLa0DfvVZcKMJWNyWLnaqND7dx/qn66R7ewM1UX5XMaDVP5wlVTaVA==
 
-acorn-jsx@^5.3.2:
+acorn-jsx@^5.2.0, acorn-jsx@^5.3.2:
   version "5.3.2"
   resolved "https://registry.yarnpkg.com/acorn-jsx/-/acorn-jsx-5.3.2.tgz#7ed5bb55908b3b2f1bc55c6af1653bada7f07937"
   integrity sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==
@@ -1906,6 +1966,11 @@ acorn-walk@^8.0.0:
   resolved "https://registry.yarnpkg.com/acorn-walk/-/acorn-walk-8.2.0.tgz#741210f2e2426454508853a2f44d0ab83b7f69c1"
   integrity sha512-k+iyHEuPgSw6SbuDpGQM+06HQUa04DZ3o+F6CSzXMvvI5KMvnaEqXe+YVe555R9nn6GPt404fos4wcgpw12SDA==
 
+acorn@^7.1.1, acorn@^7.4.1:
+  version "7.4.1"
+  resolved "https://registry.yarnpkg.com/acorn/-/acorn-7.4.1.tgz#feaed255973d2e77555b83dbc08851a6c63520fa"
+  integrity sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A==
+
 acorn@^8.0.4, acorn@^8.7.1, acorn@^8.8.0, acorn@^8.8.2:
   version "8.8.2"
   resolved "https://registry.yarnpkg.com/acorn/-/acorn-8.8.2.tgz#1b2f25db02af965399b9776b0c2c391276d37c4a"
@@ -3050,6 +3115,18 @@ eslint-scope@^7.1.1, eslint-scope@^7.2.0:
     esrecurse "^4.3.0"
     estraverse "^5.2.0"
 
+eslint-utils@^2.1.0:
+  version "2.1.0"
+  resolved "https://registry.yarnpkg.com/eslint-utils/-/eslint-utils-2.1.0.tgz#d2de5e03424e707dc10c74068ddedae708741b27"
+  integrity sha512-w94dQYoauyvlDc43XnGB8lU3Zt713vNChgt4EWwhXAP2XkBvndfxF0AgIqKOOasjPIPzj9JqgwkwbCYD0/V3Zg==
+  dependencies:
+    eslint-visitor-keys "^1.1.0"
+
+eslint-visitor-keys@^1.1.0, eslint-visitor-keys@^1.3.0:
+  version "1.3.0"
+  resolved "https://registry.yarnpkg.com/eslint-visitor-keys/-/eslint-visitor-keys-1.3.0.tgz#30ebd1ef7c2fdff01c3a4f151044af25fab0523e"
+  integrity sha512-6J72N8UNa462wa/KFODt/PJ3IU60SDpC3QXC1Hjc1BXXpfL2C9R5+AU7jhe0F6GREqVMh4Juu+NY7xn+6dipUQ==
+
 eslint-visitor-keys@^2.1.0:
   version "2.1.0"
   resolved "https://registry.yarnpkg.com/eslint-visitor-keys/-/eslint-visitor-keys-2.1.0.tgz#f65328259305927392c938ed44eb0a5c9b2bd303"
@@ -3116,6 +3193,15 @@ eslint@^8.10.0:
     strip-json-comments "^3.1.0"
     text-table "^0.2.0"
 
+espree@^6.0.0:
+  version "6.2.1"
+  resolved "https://registry.yarnpkg.com/espree/-/espree-6.2.1.tgz#77fc72e1fd744a2052c20f38a5b575832e82734a"
+  integrity sha512-ysCxRQY3WaXJz9tdbWOwuWr5Y/XrPTGX9Kiz3yoUXwW0VZ4w30HTkQLaGx/+ttFjF8i+ACbArnB4ce68a9m5hw==
+  dependencies:
+    acorn "^7.1.1"
+    acorn-jsx "^5.2.0"
+    eslint-visitor-keys "^1.1.0"
+
 espree@^9.3.1, espree@^9.5.2:
   version "9.5.2"
   resolved "https://registry.yarnpkg.com/espree/-/espree-9.5.2.tgz#e994e7dc33a082a7a82dceaf12883a829353215b"
@@ -4083,11 +4169,22 @@ json5@^1.0.1:
   dependencies:
     minimist "^1.2.0"
 
-json5@^2.1.1, json5@^2.1.2, json5@^2.2.2:
+json5@^2.1.1, json5@^2.1.2, json5@^2.2.0, json5@^2.2.2:
   version "2.2.3"
   resolved "https://registry.yarnpkg.com/json5/-/json5-2.2.3.tgz#78cd6f1a19bdc12b73db5ad0c61efd66c1e29283"
   integrity sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==
 
+jsonc-eslint-parser@^1.0.1:
+  version "1.4.1"
+  resolved "https://registry.yarnpkg.com/jsonc-eslint-parser/-/jsonc-eslint-parser-1.4.1.tgz#8cbe99f6f5199acbc5a823c4c0b6135411027fa6"
+  integrity sha512-hXBrvsR1rdjmB2kQmUjf1rEIa+TqHBGMge8pwi++C+Si1ad7EjZrJcpgwym+QGK/pqTx+K7keFAtLlVNdLRJOg==
+  dependencies:
+    acorn "^7.4.1"
+    eslint-utils "^2.1.0"
+    eslint-visitor-keys "^1.3.0"
+    espree "^6.0.0"
+    semver "^6.3.0"
+
 jsonfile@^6.0.1:
   version "6.1.0"
   resolved "https://registry.yarnpkg.com/jsonfile/-/jsonfile-6.1.0.tgz#bc55b2634793c679ec6403094eb13698a6ec0aae"
@@ -6070,6 +6167,16 @@ vue-i18n@^9.0.0:
     "@intlify/vue-devtools" "9.2.2"
     "@vue/devtools-api" "^6.2.1"
 
+vue-i18n@^9.3.0-beta.24:
+  version "9.3.0-beta.24"
+  resolved "https://registry.yarnpkg.com/vue-i18n/-/vue-i18n-9.3.0-beta.24.tgz#48c5f019cb9007c4789b989b644ece6cf6ffe75f"
+  integrity sha512-ssfAG66M8w+G2FesolGxiKmjZZ1rVRVSFYcPKPhMeCdnlxfid2DGqOwhwqJT4fyvgGadL1to3KbmHzt5Wu39Ww==
+  dependencies:
+    "@intlify/core-base" "9.3.0-beta.24"
+    "@intlify/shared" "9.3.0-beta.24"
+    "@intlify/vue-devtools" "9.3.0-beta.24"
+    "@vue/devtools-api" "^6.5.0"
+
 vue-image-crop-upload@^3.0.3:
   version "3.0.3"
   resolved "https://registry.yarnpkg.com/vue-image-crop-upload/-/vue-image-crop-upload-3.0.3.tgz#0183cf8ebee30c08afba09a6fcb0a8fcd395e236"
@@ -6343,6 +6450,15 @@ yallist@^4.0.0:
   resolved "https://registry.yarnpkg.com/yallist/-/yallist-4.0.0.tgz#9bb92790d9c0effec63be73519e11a35019a3a72"
   integrity sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==
 
+yaml-eslint-parser@^0.3.2:
+  version "0.3.2"
+  resolved "https://registry.yarnpkg.com/yaml-eslint-parser/-/yaml-eslint-parser-0.3.2.tgz#c7f5f3904f1c06ad55dc7131a731b018426b4898"
+  integrity sha512-32kYO6kJUuZzqte82t4M/gB6/+11WAuHiEnK7FreMo20xsCKPeFH5tDBU7iWxR7zeJpNnMXfJyXwne48D0hGrg==
+  dependencies:
+    eslint-visitor-keys "^1.3.0"
+    lodash "^4.17.20"
+    yaml "^1.10.0"
+
 yaml@^1.10.0, yaml@^1.10.2, yaml@^1.7.2:
   version "1.10.2"
   resolved "https://registry.yarnpkg.com/yaml/-/yaml-1.10.2.tgz#2301c5ffbf12b467de8da2333a459e29e7920e4b"