locale.mjs 2.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108
  1. // Utilities
  2. import { computed, inject, provide, ref } from 'vue';
  3. import { createVuetifyAdapter } from "../locale/adapters/vuetify.mjs"; // Types
  4. export const LocaleSymbol = Symbol.for('vuetify:locale');
  5. function isLocaleInstance(obj) {
  6. return obj.name != null;
  7. }
  8. export function createLocale(options) {
  9. const i18n = options?.adapter && isLocaleInstance(options?.adapter) ? options?.adapter : createVuetifyAdapter(options);
  10. const rtl = createRtl(i18n, options);
  11. return {
  12. ...i18n,
  13. ...rtl
  14. };
  15. }
  16. export function useLocale() {
  17. const locale = inject(LocaleSymbol);
  18. if (!locale) throw new Error('[Vuetify] Could not find injected locale instance');
  19. return locale;
  20. }
  21. export function provideLocale(props) {
  22. const locale = inject(LocaleSymbol);
  23. if (!locale) throw new Error('[Vuetify] Could not find injected locale instance');
  24. const i18n = locale.provide(props);
  25. const rtl = provideRtl(i18n, locale.rtl, props);
  26. const data = {
  27. ...i18n,
  28. ...rtl
  29. };
  30. provide(LocaleSymbol, data);
  31. return data;
  32. }
  33. // RTL
  34. export const RtlSymbol = Symbol.for('vuetify:rtl');
  35. function genDefaults() {
  36. return {
  37. af: false,
  38. ar: true,
  39. bg: false,
  40. ca: false,
  41. ckb: false,
  42. cs: false,
  43. de: false,
  44. el: false,
  45. en: false,
  46. es: false,
  47. et: false,
  48. fa: true,
  49. fi: false,
  50. fr: false,
  51. hr: false,
  52. hu: false,
  53. he: true,
  54. id: false,
  55. it: false,
  56. ja: false,
  57. km: false,
  58. ko: false,
  59. lv: false,
  60. lt: false,
  61. nl: false,
  62. no: false,
  63. pl: false,
  64. pt: false,
  65. ro: false,
  66. ru: false,
  67. sk: false,
  68. sl: false,
  69. srCyrl: false,
  70. srLatn: false,
  71. sv: false,
  72. th: false,
  73. tr: false,
  74. az: false,
  75. uk: false,
  76. vi: false,
  77. zhHans: false,
  78. zhHant: false
  79. };
  80. }
  81. export function createRtl(i18n, options) {
  82. const rtl = ref(options?.rtl ?? genDefaults());
  83. const isRtl = computed(() => rtl.value[i18n.current.value] ?? false);
  84. return {
  85. isRtl,
  86. rtl,
  87. rtlClasses: computed(() => `v-locale--is-${isRtl.value ? 'rtl' : 'ltr'}`)
  88. };
  89. }
  90. export function provideRtl(locale, rtl, props) {
  91. const isRtl = computed(() => props.rtl ?? rtl.value[locale.current.value] ?? false);
  92. return {
  93. isRtl,
  94. rtl,
  95. rtlClasses: computed(() => `v-locale--is-${isRtl.value ? 'rtl' : 'ltr'}`)
  96. };
  97. }
  98. export function useRtl() {
  99. const locale = inject(LocaleSymbol);
  100. if (!locale) throw new Error('[Vuetify] Could not find injected rtl instance');
  101. return {
  102. isRtl: locale.isRtl,
  103. rtlClasses: locale.rtlClasses
  104. };
  105. }
  106. //# sourceMappingURL=locale.mjs.map