1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798 |
- // Composables
- import { useProxiedModel } from "../../composables/proxiedModel.mjs"; // Utilities
- import { ref, shallowRef, watch } from 'vue';
- import { consoleError, consoleWarn, getObjectValueByPath } from "../../util/index.mjs"; // Locales
- import en from "../en.mjs"; // Types
- const LANG_PREFIX = '$vuetify.';
- const replace = (str, params) => {
- return str.replace(/\{(\d+)\}/g, (match, index) => {
- return String(params[+index]);
- });
- };
- const createTranslateFunction = (current, fallback, messages) => {
- return function (key) {
- for (var _len = arguments.length, params = new Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) {
- params[_key - 1] = arguments[_key];
- }
- if (!key.startsWith(LANG_PREFIX)) {
- return replace(key, params);
- }
- const shortKey = key.replace(LANG_PREFIX, '');
- const currentLocale = current.value && messages.value[current.value];
- const fallbackLocale = fallback.value && messages.value[fallback.value];
- let str = getObjectValueByPath(currentLocale, shortKey, null);
- if (!str) {
- consoleWarn(`Translation key "${key}" not found in "${current.value}", trying fallback locale`);
- str = getObjectValueByPath(fallbackLocale, shortKey, null);
- }
- if (!str) {
- consoleError(`Translation key "${key}" not found in fallback`);
- str = key;
- }
- if (typeof str !== 'string') {
- consoleError(`Translation key "${key}" has a non-string value`);
- str = key;
- }
- return replace(str, params);
- };
- };
- function createNumberFunction(current, fallback) {
- return (value, options) => {
- const numberFormat = new Intl.NumberFormat([current.value, fallback.value], options);
- return numberFormat.format(value);
- };
- }
- function useProvided(props, prop, provided) {
- const internal = useProxiedModel(props, prop, props[prop] ?? provided.value);
- // TODO: Remove when defaultValue works
- internal.value = props[prop] ?? provided.value;
- watch(provided, v => {
- if (props[prop] == null) {
- internal.value = provided.value;
- }
- });
- return internal;
- }
- function createProvideFunction(state) {
- return props => {
- const current = useProvided(props, 'locale', state.current);
- const fallback = useProvided(props, 'fallback', state.fallback);
- const messages = useProvided(props, 'messages', state.messages);
- return {
- name: 'vuetify',
- current,
- fallback,
- messages,
- t: createTranslateFunction(current, fallback, messages),
- n: createNumberFunction(current, fallback),
- provide: createProvideFunction({
- current,
- fallback,
- messages
- })
- };
- };
- }
- export function createVuetifyAdapter(options) {
- const current = shallowRef(options?.locale ?? 'en');
- const fallback = shallowRef(options?.fallback ?? 'en');
- const messages = ref({
- en,
- ...options?.messages
- });
- return {
- name: 'vuetify',
- current,
- fallback,
- messages,
- t: createTranslateFunction(current, fallback, messages),
- n: createNumberFunction(current, fallback),
- provide: createProvideFunction({
- current,
- fallback,
- messages
- })
- };
- }
- //# sourceMappingURL=vuetify.mjs.map
|