UNPKG

@nativescript-community/l

Version:

Native internationalization plugin for NativeScript using native capabilities of each platform

111 lines 3.86 kB
import { File, knownFolders, path } from '@nativescript/core'; import { vsprintf } from 'sprintf-js'; import { localizeNative, localizeNativePlural } from './localizenative'; import { pluralCategory, setPluralLocale } from './plural'; export * from './localizenative'; export * from './plural'; let currentLocales; export function getCurrentLocales() { return currentLocales; } function flatten(obj) { const newObj = {}; for (const key of Object.keys(obj)) { if (typeof obj[key] !== null && typeof obj[key] === 'object') { const subObj = flatten(obj[key]); for (const subKey of Object.keys(subObj)) { newObj[`${key}.${subKey}`] = subObj[subKey]; } } else { newObj[key] = obj[key]; } } return newObj; } export function loadLocaleJSON(locale, jsonFileOrData, defaultFileOrData, shouldFlatten = true) { setPluralLocale(locale); if (typeof jsonFileOrData === 'string') { let defaultFileOrDataStr = defaultFileOrData; if (jsonFileOrData.indexOf('~/') === 0) { jsonFileOrData = path.join(knownFolders.currentApp().path, jsonFileOrData.replace('~/', '')); } if (defaultFileOrDataStr && defaultFileOrDataStr.indexOf('~/') === 0) { defaultFileOrDataStr = path.join(knownFolders.currentApp().path, defaultFileOrDataStr.replace('~/', '')); } if (!/.(json|zip)$/.test(jsonFileOrData)) { jsonFileOrData += '.json'; } if (defaultFileOrDataStr && !/.(json|zip)$/.test(defaultFileOrDataStr)) { defaultFileOrDataStr += '.json'; } if (defaultFileOrDataStr && defaultFileOrDataStr !== jsonFileOrData) { currentLocales = Object.assign(JSON.parse(File.fromPath(defaultFileOrDataStr).readTextSync()), JSON.parse(File.fromPath(jsonFileOrData).readTextSync())); } else { currentLocales = JSON.parse(File.fromPath(jsonFileOrData).readTextSync()); } } else if (typeof jsonFileOrData === 'object') { if (defaultFileOrData) { currentLocales = Object.assign(defaultFileOrData, jsonFileOrData); } else { currentLocales = jsonFileOrData; } } if (shouldFlatten && currentLocales) { currentLocales = flatten(currentLocales); } } export function l(key, ...args) { if (currentLocales) { try { return vsprintf(currentLocales[key] || key, args); } catch (err) { console.error('l error', err); return key; } } else { return localizeNative(key, ...args); } } export function pluralKey(key, count) { if (currentLocales) { const categoryKey = `${key}_${pluralCategory(count)}`; if (currentLocales[categoryKey]) { return categoryKey; } if (currentLocales[`${key}_other`]) { return `${key}_other`; } } return key; } export function lp(key, count, ...args) { if (currentLocales) { return l(pluralKey(key, count), count, ...args); } return localizeNativePlural(key, count, ...args); } export function capitalize(value) { return (value === null || value === void 0 ? void 0 : value.charAt(0).toUpperCase()) + value.slice(1); } export function titlecase(value) { return value === null || value === void 0 ? void 0 : value.replace(/\w\S*/g, capitalize); } export function lt(key, ...args) { return titlecase(l(key, ...args)); } export function lu(key, ...args) { return l(key, ...args).toUpperCase(); } export function lc(key, ...args) { return capitalize(l(key, ...args)); } export function lcp(key, count, ...args) { return capitalize(lp(key, count, ...args)); } //# sourceMappingURL=localize.common.js.map