@nativescript-community/l
Version:
Native internationalization plugin for NativeScript using native capabilities of each platform
111 lines • 3.86 kB
JavaScript
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