47 lines
1.3 KiB
TypeScript
47 lines
1.3 KiB
TypeScript
/*---------------------------------------------------------------------------------------------
|
|
* Copyright (c) Microsoft Corporation. All rights reserved.
|
|
* Licensed under the MIT License. See License.txt in the project root for license information.
|
|
*--------------------------------------------------------------------------------------------*/
|
|
|
|
export interface Options {
|
|
locale?: string;
|
|
cacheLanguageResolution?: boolean;
|
|
}
|
|
export interface LocalizeInfo {
|
|
key: string;
|
|
comment: string[];
|
|
}
|
|
export interface LocalizeFunc {
|
|
(info: LocalizeInfo, message: string, ...args: any[]): string;
|
|
(key: string, message: string, ...args: any[]): string;
|
|
}
|
|
export interface LoadFunc {
|
|
(file?: string): LocalizeFunc;
|
|
}
|
|
|
|
function format(message: string, args: any[]): string {
|
|
let result: string;
|
|
|
|
if (args.length === 0) {
|
|
result = message;
|
|
} else {
|
|
result = message.replace(/\{(\d+)\}/g, (match, rest) => {
|
|
let index = rest[0];
|
|
return typeof args[index] !== 'undefined' ? args[index] : match;
|
|
});
|
|
}
|
|
return result;
|
|
}
|
|
|
|
function localize(key: string | LocalizeInfo, message: string, ...args: any[]): string {
|
|
return format(message, args);
|
|
}
|
|
|
|
export function loadMessageBundle(file?: string): LocalizeFunc {
|
|
return localize;
|
|
}
|
|
|
|
export function config(opt?: Options | string): LoadFunc {
|
|
return loadMessageBundle;
|
|
}
|