@libs-ui/utils 0.2.355-3 → 0.2.355-5

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -26,8 +26,14 @@ export class UtilsLanguageConstants {
26
26
  static CEB = 'ceb'; // Tiếng Cebuano (Philippines)
27
27
  static JV = 'jv'; // Tiếng Java (Indonesia)
28
28
  static SU = 'su'; // Tiếng Sundanese (Indonesia)
29
- // Ngôn ngữ mặc định
30
- static defaultLang = UtilsLanguageConstants.VI;
29
+ static defaultLang = () => {
30
+ const browserLang = 'navigator' in window ? navigator.language || UtilsLanguageConstants.EN : UtilsLanguageConstants.EN;
31
+ const lang = browserLang.split('-')[0] || UtilsLanguageConstants.EN;
32
+ if (UtilsLanguageConstants.isSupported(lang)) {
33
+ return lang;
34
+ }
35
+ return UtilsLanguageConstants.EN;
36
+ };
31
37
  // Danh sách các ngôn ngữ được hỗ trợ
32
38
  static supportedLanguages = new Set([
33
39
  UtilsLanguageConstants.VI,
@@ -58,13 +64,19 @@ export class UtilsLanguageConstants {
58
64
  UtilsLanguageConstants.JV,
59
65
  UtilsLanguageConstants.SU,
60
66
  ]);
67
+ static setSupportedLanguages(languages) {
68
+ if (languages.length === 0) {
69
+ throw new Error('Languages is required');
70
+ }
71
+ this.supportedLanguages = new Set(languages);
72
+ }
61
73
  /**
62
74
  * Kiểm tra xem ngôn ngữ đầu vào có được hỗ trợ không
63
75
  * @param lang Mã ngôn ngữ cần kiểm tra
64
76
  * @returns True nếu được hỗ trợ, False nếu không
65
77
  */
66
78
  static isSupported(lang) {
67
- return UtilsLanguageConstants.supportedLanguages.has(lang);
79
+ return this.supportedLanguages.has(lang);
68
80
  }
69
81
  }
70
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibGFuZ3VhZ2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9saWJzLXVpL3V0aWxzL3NyYy9sYW5ndWFnZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxNQUFNLE9BQU8sc0JBQXNCO0lBQzFCLE1BQU0sQ0FBQyxFQUFFLEdBQUcsSUFBSSxDQUFDLENBQUMsYUFBYTtJQUMvQixNQUFNLENBQUMsRUFBRSxHQUFHLElBQUksQ0FBQyxDQUFDLFlBQVk7SUFDOUIsTUFBTSxDQUFDLEVBQUUsR0FBRyxJQUFJLENBQUMsQ0FBQyxhQUFhO0lBQy9CLE1BQU0sQ0FBQyxFQUFFLEdBQUcsSUFBSSxDQUFDLENBQUMsWUFBWTtJQUM5QixNQUFNLENBQUMsRUFBRSxHQUFHLElBQUksQ0FBQyxDQUFDLG9CQUFvQjtJQUN0QyxNQUFNLENBQUMsRUFBRSxHQUFHLElBQUksQ0FBQyxDQUFDLHlCQUF5QjtJQUMzQyxNQUFNLENBQUMsS0FBSyxHQUFHLE9BQU8sQ0FBQyxDQUFDLHlCQUF5QjtJQUNqRCxNQUFNLENBQUMsRUFBRSxHQUFHLElBQUksQ0FBQyxDQUFDLGFBQWE7SUFDL0IsTUFBTSxDQUFDLEVBQUUsR0FBRyxJQUFJLENBQUMsQ0FBQyxZQUFZO0lBQzlCLE1BQU0sQ0FBQyxFQUFFLEdBQUcsSUFBSSxDQUFDLENBQUMsWUFBWTtJQUM5QixNQUFNLENBQUMsRUFBRSxHQUFHLElBQUksQ0FBQyxDQUFDLFVBQVU7SUFDNUIsTUFBTSxDQUFDLEVBQUUsR0FBRyxJQUFJLENBQUMsQ0FBQyxtQkFBbUI7SUFDckMsTUFBTSxDQUFDLEVBQUUsR0FBRyxJQUFJLENBQUMsQ0FBQyxhQUFhO0lBQy9CLE1BQU0sQ0FBQyxFQUFFLEdBQUcsSUFBSSxDQUFDLENBQUMsa0JBQWtCO0lBQ3BDLE1BQU0sQ0FBQyxFQUFFLEdBQUcsSUFBSSxDQUFDLENBQUMsaUJBQWlCO0lBQ25DLE1BQU0sQ0FBQyxFQUFFLEdBQUcsSUFBSSxDQUFDLENBQUMsY0FBYztJQUNoQyxNQUFNLENBQUMsRUFBRSxHQUFHLElBQUksQ0FBQyxDQUFDLGNBQWM7SUFDaEMsTUFBTSxDQUFDLEVBQUUsR0FBRyxJQUFJLENBQUMsQ0FBQyxlQUFlO0lBQ2pDLE1BQU0sQ0FBQyxFQUFFLEdBQUcsSUFBSSxDQUFDLENBQUMsbUJBQW1CO0lBQ3JDLE1BQU0sQ0FBQyxFQUFFLEdBQUcsSUFBSSxDQUFDLENBQUMsZUFBZTtJQUNqQyxNQUFNLENBQUMsRUFBRSxHQUFHLElBQUksQ0FBQyxDQUFDLDBCQUEwQjtJQUM1QyxNQUFNLENBQUMsRUFBRSxHQUFHLElBQUksQ0FBQyxDQUFDLFlBQVk7SUFDOUIsTUFBTSxDQUFDLEVBQUUsR0FBRyxJQUFJLENBQUMsQ0FBQyw0QkFBNEI7SUFDOUMsTUFBTSxDQUFDLEVBQUUsR0FBRyxJQUFJLENBQUMsQ0FBQyw4QkFBOEI7SUFDaEQsTUFBTSxDQUFDLEdBQUcsR0FBRyxLQUFLLENBQUMsQ0FBQyw4QkFBOEI7SUFDbEQsTUFBTSxDQUFDLEVBQUUsR0FBRyxJQUFJLENBQUMsQ0FBQyx5QkFBeUI7SUFDM0MsTUFBTSxDQUFDLEVBQUUsR0FBRyxJQUFJLENBQUMsQ0FBQyw4QkFBOEI7SUFFdkQsb0JBQW9CO0lBQ2IsTUFBTSxDQUFDLFdBQVcsR0FBRyxzQkFBc0IsQ0FBQyxFQUFFLENBQUM7SUFFdEQscUNBQXFDO0lBQzlCLE1BQU0sQ0FBQyxrQkFBa0IsR0FBRyxJQUFJLEdBQUcsQ0FBQztRQUN6QyxzQkFBc0IsQ0FBQyxFQUFFO1FBQ3pCLHNCQUFzQixDQUFDLEVBQUU7UUFDekIsc0JBQXNCLENBQUMsRUFBRTtRQUN6QixzQkFBc0IsQ0FBQyxFQUFFO1FBQ3pCLHNCQUFzQixDQUFDLEVBQUU7UUFDekIsc0JBQXNCLENBQUMsRUFBRTtRQUN6QixzQkFBc0IsQ0FBQyxLQUFLO1FBQzVCLHNCQUFzQixDQUFDLEVBQUU7UUFDekIsc0JBQXNCLENBQUMsRUFBRTtRQUN6QixzQkFBc0IsQ0FBQyxFQUFFO1FBQ3pCLHNCQUFzQixDQUFDLEVBQUU7UUFDekIsc0JBQXNCLENBQUMsRUFBRTtRQUN6QixzQkFBc0IsQ0FBQyxFQUFFO1FBQ3pCLHNCQUFzQixDQUFDLEVBQUU7UUFDekIsc0JBQXNCLENBQUMsRUFBRTtRQUN6QixzQkFBc0IsQ0FBQyxFQUFFO1FBQ3pCLHNCQUFzQixDQUFDLEVBQUU7UUFDekIsc0JBQXNCLENBQUMsRUFBRTtRQUN6QixzQkFBc0IsQ0FBQyxFQUFFO1FBQ3pCLHNCQUFzQixDQUFDLEVBQUU7UUFDekIsc0JBQXNCLENBQUMsRUFBRTtRQUN6QixzQkFBc0IsQ0FBQyxFQUFFO1FBQ3pCLHNCQUFzQixDQUFDLEVBQUU7UUFDekIsc0JBQXNCLENBQUMsRUFBRTtRQUN6QixzQkFBc0IsQ0FBQyxHQUFHO1FBQzFCLHNCQUFzQixDQUFDLEVBQUU7UUFDekIsc0JBQXNCLENBQUMsRUFBRTtLQUMxQixDQUFDLENBQUM7SUFFSDs7OztPQUlHO0lBQ0ksTUFBTSxDQUFDLFdBQVcsQ0FBQyxJQUFZO1FBQ3BDLE9BQU8sc0JBQXNCLENBQUMsa0JBQWtCLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDO0lBQzdELENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgY2xhc3MgVXRpbHNMYW5ndWFnZUNvbnN0YW50cyB7XG4gIHB1YmxpYyBzdGF0aWMgVkkgPSAndmknOyAvLyBUaeG6v25nIFZp4buHdFxuICBwdWJsaWMgc3RhdGljIEVOID0gJ2VuJzsgLy8gVGnhur9uZyBBbmhcbiAgcHVibGljIHN0YXRpYyBGUiA9ICdmcic7IC8vIFRp4bq/bmcgUGjDoXBcbiAgcHVibGljIHN0YXRpYyBERSA9ICdkZSc7IC8vIFRp4bq/bmcgxJDhu6ljXG4gIHB1YmxpYyBzdGF0aWMgRVMgPSAnZXMnOyAvLyBUaeG6v25nIFTDonkgQmFuIE5oYVxuICBwdWJsaWMgc3RhdGljIFpIID0gJ3poJzsgLy8gVGnhur9uZyBUcnVuZyAoR2nhuqNuIHRo4buDKVxuICBwdWJsaWMgc3RhdGljIFpIX1RXID0gJ3poLVRXJzsgLy8gVGnhur9uZyBUcnVuZyAoUGjhu5NuIHRo4buDKVxuICBwdWJsaWMgc3RhdGljIEpBID0gJ2phJzsgLy8gVGnhur9uZyBOaOG6rXRcbiAgcHVibGljIHN0YXRpYyBLTyA9ICdrbyc7IC8vIFRp4bq/bmcgSMOgblxuICBwdWJsaWMgc3RhdGljIFJVID0gJ3J1JzsgLy8gVGnhur9uZyBOZ2FcbiAgcHVibGljIHN0YXRpYyBJVCA9ICdpdCc7IC8vIFRp4bq/bmcgw51cbiAgcHVibGljIHN0YXRpYyBQVCA9ICdwdCc7IC8vIFRp4bq/bmcgQuG7kyDEkMOgbyBOaGFcbiAgcHVibGljIHN0YXRpYyBUSCA9ICd0aCc7IC8vIFRp4bq/bmcgVGjDoWlcbiAgcHVibGljIHN0YXRpYyBJRCA9ICdpZCc7IC8vIFRp4bq/bmcgSW5kb25lc2lhXG4gIHB1YmxpYyBzdGF0aWMgTVMgPSAnbXMnOyAvLyBUaeG6v25nIE1hbGF5c2lhXG4gIHB1YmxpYyBzdGF0aWMgQVIgPSAnYXInOyAvLyBUaeG6v25nIOG6oiBS4bqtcFxuICBwdWJsaWMgc3RhdGljIEhJID0gJ2hpJzsgLy8gVGnhur9uZyBIaW5kaVxuICBwdWJsaWMgc3RhdGljIEJOID0gJ2JuJzsgLy8gVGnhur9uZyBCZW5nYWxcbiAgcHVibGljIHN0YXRpYyBUUiA9ICd0cic7IC8vIFRp4bq/bmcgVGjhu5UgTmjEqSBL4buzXG4gIHB1YmxpYyBzdGF0aWMgTkwgPSAnbmwnOyAvLyBUaeG6v25nIEjDoCBMYW5cbiAgcHVibGljIHN0YXRpYyBLTSA9ICdrbSc7IC8vIFRp4bq/bmcgS2htZXIgKENhbXB1Y2hpYSlcbiAgcHVibGljIHN0YXRpYyBMTyA9ICdsbyc7IC8vIFRp4bq/bmcgTMOgb1xuICBwdWJsaWMgc3RhdGljIE1ZID0gJ215JzsgLy8gVGnhur9uZyBNaeG6v24gxJBp4buHbiAoTXlhbm1hcilcbiAgcHVibGljIHN0YXRpYyBUTCA9ICd0bCc7IC8vIFRp4bq/bmcgVGFnYWxvZyAoUGhpbGlwcGluZXMpXG4gIHB1YmxpYyBzdGF0aWMgQ0VCID0gJ2NlYic7IC8vIFRp4bq/bmcgQ2VidWFubyAoUGhpbGlwcGluZXMpXG4gIHB1YmxpYyBzdGF0aWMgSlYgPSAnanYnOyAvLyBUaeG6v25nIEphdmEgKEluZG9uZXNpYSlcbiAgcHVibGljIHN0YXRpYyBTVSA9ICdzdSc7IC8vIFRp4bq/bmcgU3VuZGFuZXNlIChJbmRvbmVzaWEpXG5cbiAgLy8gTmfDtG4gbmfhu68gbeG6t2MgxJHhu4tuaFxuICBwdWJsaWMgc3RhdGljIGRlZmF1bHRMYW5nID0gVXRpbHNMYW5ndWFnZUNvbnN0YW50cy5WSTtcblxuICAvLyBEYW5oIHPDoWNoIGPDoWMgbmfDtG4gbmfhu68gxJHGsOG7o2MgaOG7lyB0cuG7o1xuICBwdWJsaWMgc3RhdGljIHN1cHBvcnRlZExhbmd1YWdlcyA9IG5ldyBTZXQoW1xuICAgIFV0aWxzTGFuZ3VhZ2VDb25zdGFudHMuVkksXG4gICAgVXRpbHNMYW5ndWFnZUNvbnN0YW50cy5FTixcbiAgICBVdGlsc0xhbmd1YWdlQ29uc3RhbnRzLkZSLFxuICAgIFV0aWxzTGFuZ3VhZ2VDb25zdGFudHMuREUsXG4gICAgVXRpbHNMYW5ndWFnZUNvbnN0YW50cy5FUyxcbiAgICBVdGlsc0xhbmd1YWdlQ29uc3RhbnRzLlpILFxuICAgIFV0aWxzTGFuZ3VhZ2VDb25zdGFudHMuWkhfVFcsXG4gICAgVXRpbHNMYW5ndWFnZUNvbnN0YW50cy5KQSxcbiAgICBVdGlsc0xhbmd1YWdlQ29uc3RhbnRzLktPLFxuICAgIFV0aWxzTGFuZ3VhZ2VDb25zdGFudHMuUlUsXG4gICAgVXRpbHNMYW5ndWFnZUNvbnN0YW50cy5JVCxcbiAgICBVdGlsc0xhbmd1YWdlQ29uc3RhbnRzLlBULFxuICAgIFV0aWxzTGFuZ3VhZ2VDb25zdGFudHMuVEgsXG4gICAgVXRpbHNMYW5ndWFnZUNvbnN0YW50cy5JRCxcbiAgICBVdGlsc0xhbmd1YWdlQ29uc3RhbnRzLk1TLFxuICAgIFV0aWxzTGFuZ3VhZ2VDb25zdGFudHMuQVIsXG4gICAgVXRpbHNMYW5ndWFnZUNvbnN0YW50cy5ISSxcbiAgICBVdGlsc0xhbmd1YWdlQ29uc3RhbnRzLkJOLFxuICAgIFV0aWxzTGFuZ3VhZ2VDb25zdGFudHMuVFIsXG4gICAgVXRpbHNMYW5ndWFnZUNvbnN0YW50cy5OTCxcbiAgICBVdGlsc0xhbmd1YWdlQ29uc3RhbnRzLktNLFxuICAgIFV0aWxzTGFuZ3VhZ2VDb25zdGFudHMuTE8sXG4gICAgVXRpbHNMYW5ndWFnZUNvbnN0YW50cy5NWSxcbiAgICBVdGlsc0xhbmd1YWdlQ29uc3RhbnRzLlRMLFxuICAgIFV0aWxzTGFuZ3VhZ2VDb25zdGFudHMuQ0VCLFxuICAgIFV0aWxzTGFuZ3VhZ2VDb25zdGFudHMuSlYsXG4gICAgVXRpbHNMYW5ndWFnZUNvbnN0YW50cy5TVSxcbiAgXSk7XG5cbiAgLyoqXG4gICAqIEtp4buDbSB0cmEgeGVtIG5nw7RuIG5n4buvIMSR4bqndSB2w6BvIGPDsyDEkcaw4bujYyBo4buXIHRy4bujIGtow7RuZ1xuICAgKiBAcGFyYW0gbGFuZyBNw6MgbmfDtG4gbmfhu68gY+G6p24ga2nhu4NtIHRyYVxuICAgKiBAcmV0dXJucyBUcnVlIG7hur91IMSRxrDhu6NjIGjhu5cgdHLhu6MsIEZhbHNlIG7hur91IGtow7RuZ1xuICAgKi9cbiAgcHVibGljIHN0YXRpYyBpc1N1cHBvcnRlZChsYW5nOiBzdHJpbmcpOiBib29sZWFuIHtcbiAgICByZXR1cm4gVXRpbHNMYW5ndWFnZUNvbnN0YW50cy5zdXBwb3J0ZWRMYW5ndWFnZXMuaGFzKGxhbmcpO1xuICB9XG59XG4iXX0=
82
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibGFuZ3VhZ2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9saWJzLXVpL3V0aWxzL3NyYy9sYW5ndWFnZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFFQSxNQUFNLE9BQU8sc0JBQXNCO0lBQzFCLE1BQU0sQ0FBQyxFQUFFLEdBQUcsSUFBSSxDQUFDLENBQUMsYUFBYTtJQUMvQixNQUFNLENBQUMsRUFBRSxHQUFHLElBQUksQ0FBQyxDQUFDLFlBQVk7SUFDOUIsTUFBTSxDQUFDLEVBQUUsR0FBRyxJQUFJLENBQUMsQ0FBQyxhQUFhO0lBQy9CLE1BQU0sQ0FBQyxFQUFFLEdBQUcsSUFBSSxDQUFDLENBQUMsWUFBWTtJQUM5QixNQUFNLENBQUMsRUFBRSxHQUFHLElBQUksQ0FBQyxDQUFDLG9CQUFvQjtJQUN0QyxNQUFNLENBQUMsRUFBRSxHQUFHLElBQUksQ0FBQyxDQUFDLHlCQUF5QjtJQUMzQyxNQUFNLENBQUMsS0FBSyxHQUFHLE9BQU8sQ0FBQyxDQUFDLHlCQUF5QjtJQUNqRCxNQUFNLENBQUMsRUFBRSxHQUFHLElBQUksQ0FBQyxDQUFDLGFBQWE7SUFDL0IsTUFBTSxDQUFDLEVBQUUsR0FBRyxJQUFJLENBQUMsQ0FBQyxZQUFZO0lBQzlCLE1BQU0sQ0FBQyxFQUFFLEdBQUcsSUFBSSxDQUFDLENBQUMsWUFBWTtJQUM5QixNQUFNLENBQUMsRUFBRSxHQUFHLElBQUksQ0FBQyxDQUFDLFVBQVU7SUFDNUIsTUFBTSxDQUFDLEVBQUUsR0FBRyxJQUFJLENBQUMsQ0FBQyxtQkFBbUI7SUFDckMsTUFBTSxDQUFDLEVBQUUsR0FBRyxJQUFJLENBQUMsQ0FBQyxhQUFhO0lBQy9CLE1BQU0sQ0FBQyxFQUFFLEdBQUcsSUFBSSxDQUFDLENBQUMsa0JBQWtCO0lBQ3BDLE1BQU0sQ0FBQyxFQUFFLEdBQUcsSUFBSSxDQUFDLENBQUMsaUJBQWlCO0lBQ25DLE1BQU0sQ0FBQyxFQUFFLEdBQUcsSUFBSSxDQUFDLENBQUMsY0FBYztJ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O0lBRUQ7Ozs7T0FJRztJQUNJLE1BQU0sQ0FBQyxXQUFXLENBQUMsSUFBWTtRQUNwQyxPQUFPLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDM0MsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IFRZUEVfTEFOR1VBR0VfU1VQUE9SVCB9IGZyb20gJ0BsaWJzLXVpL2ludGVyZmFjZXMtdHlwZXMnO1xuXG5leHBvcnQgY2xhc3MgVXRpbHNMYW5ndWFnZUNvbnN0YW50cyB7XG4gIHB1YmxpYyBzdGF0aWMgVkkgPSAndmknOyAvLyBUaeG6v25nIFZp4buHdFxuICBwdWJsaWMgc3RhdGljIEVOID0gJ2VuJzsgLy8gVGnhur9uZyBBbmhcbiAgcHVibGljIHN0YXRpYyBGUiA9ICdmcic7IC8vIFRp4bq/bmcgUGjDoXBcbiAgcHVibGljIHN0YXRpYyBERSA9ICdkZSc7IC8vIFRp4bq/bmcgxJDhu6ljXG4gIHB1YmxpYyBzdGF0aWMgRVMgPSAnZXMnOyAvLyBUaeG6v25nIFTDonkgQmFuIE5oYVxuICBwdWJsaWMgc3RhdGljIFpIID0gJ3poJzsgLy8gVGnhur9uZyBUcnVuZyAoR2nhuqNuIHRo4buDKVxuICBwdWJsaWMgc3RhdGljIFpIX1RXID0gJ3poLVRXJzsgLy8gVGnhur9uZyBUcnVuZyAoUGjhu5NuIHRo4buDKVxuICBwdWJsaWMgc3RhdGljIEpBID0gJ2phJzsgLy8gVGnhur9uZyBOaOG6rXRcbiAgcHVibGljIHN0YXRpYyBLTyA9ICdrbyc7IC8vIFRp4bq/bmcgSMOgblxuICBwdWJsaWMgc3RhdGljIFJVID0gJ3J1JzsgLy8gVGnhur9uZyBOZ2FcbiAgcHVibGljIHN0YXRpYyBJVCA9ICdpdCc7IC8vIFRp4bq/bmcgw51cbiAgcHVibGljIHN0YXRpYyBQVCA9ICdwdCc7IC8vIFRp4bq/bmcgQuG7kyDEkMOgbyBOaGFcbiAgcHVibGljIHN0YXRpYyBUSCA9ICd0aCc7IC8vIFRp4bq/bmcgVGjDoWlcbiAgcHVibGljIHN0YXRpYyBJRCA9ICdpZCc7IC8vIFRp4bq/bmcgSW5kb25lc2lhXG4gIHB1YmxpYyBzdGF0aWMgTVMgPSAnbXMnOyAvLyBUaeG6v25nIE1hbGF5c2lhXG4gIHB1YmxpYyBzdGF0aWMgQVIgPSAnYXInOyAvLyBUaeG6v25nIOG6oiBS4bqtcFxuICBwdWJsaWMgc3RhdGljIEhJID0gJ2hpJzsgLy8gVGnhur9uZyBIaW5kaVxuICBwdWJsaWMgc3RhdGljIEJOID0gJ2JuJzsgLy8gVGnhur9uZyBCZW5nYWxcbiAgcHVibGljIHN0YXRpYyBUUiA9ICd0cic7IC8vIFRp4bq/bmcgVGjhu5UgTmjEqSBL4buzXG4gIHB1YmxpYyBzdGF0aWMgTkwgPSAnbmwnOyAvLyBUaeG6v25nIEjDoCBMYW5cbiAgcHVibGljIHN0YXRpYyBLTSA9ICdrbSc7IC8vIFRp4bq/bmcgS2htZXIgKENhbXB1Y2hpYSlcbiAgcHVibGljIHN0YXRpYyBMTyA9ICdsbyc7IC8vIFRp4bq/bmcgTMOgb1xuICBwdWJsaWMgc3RhdGljIE1ZID0gJ215JzsgLy8gVGnhur9uZyBNaeG6v24gxJBp4buHbiAoTXlhbm1hcilcbiAgcHVibGljIHN0YXRpYyBUTCA9ICd0bCc7IC8vIFRp4bq/bmcgVGFnYWxvZyAoUGhpbGlwcGluZXMpXG4gIHB1YmxpYyBzdGF0aWMgQ0VCID0gJ2NlYic7IC8vIFRp4bq/bmcgQ2VidWFubyAoUGhpbGlwcGluZXMpXG4gIHB1YmxpYyBzdGF0aWMgSlYgPSAnanYnOyAvLyBUaeG6v25nIEphdmEgKEluZG9uZXNpYSlcbiAgcHVibGljIHN0YXRpYyBTVSA9ICdzdSc7IC8vIFRp4bq/bmcgU3VuZGFuZXNlIChJbmRvbmVzaWEpXG5cbiAgcHVibGljIHN0YXRpYyBkZWZhdWx0TGFuZyA9ICgpOiBzdHJpbmcgPT4ge1xuICAgIGNvbnN0IGJyb3dzZXJMYW5nID0gJ25hdmlnYXRvcicgaW4gd2luZG93ID8gbmF2aWdhdG9yLmxhbmd1YWdlIHx8IFV0aWxzTGFuZ3VhZ2VDb25zdGFudHMuRU4gOiBVdGlsc0xhbmd1YWdlQ29uc3RhbnRzLkVOO1xuICAgIGNvbnN0IGxhbmcgPSBicm93c2VyTGFuZy5zcGxpdCgnLScpWzBdIHx8IFV0aWxzTGFuZ3VhZ2VDb25zdGFudHMuRU47XG4gICAgaWYgKFV0aWxzTGFuZ3VhZ2VDb25zdGFudHMuaXNTdXBwb3J0ZWQobGFuZykpIHtcbiAgICAgIHJldHVybiBsYW5nIGFzIFRZUEVfTEFOR1VBR0VfU1VQUE9SVDtcbiAgICB9XG4gICAgcmV0dXJuIFV0aWxzTGFuZ3VhZ2VDb25zdGFudHMuRU4gYXMgVFlQRV9MQU5HVUFHRV9TVVBQT1JUO1xuICB9O1xuXG4gIC8vIERhbmggc8OhY2ggY8OhYyBuZ8O0biBuZ+G7ryDEkcaw4bujYyBo4buXIHRy4bujXG4gIHByaXZhdGUgc3RhdGljIHN1cHBvcnRlZExhbmd1YWdlcyA9IG5ldyBTZXQoW1xuICAgIFV0aWxzTGFuZ3VhZ2VDb25zdGFudHMuVkksXG4gICAgVXRpbHNMYW5ndWFnZUNvbnN0YW50cy5FTixcbiAgICBVdGlsc0xhbmd1YWdlQ29uc3RhbnRzLkZSLFxuICAgIFV0aWxzTGFuZ3VhZ2VDb25zdGFudHMuREUsXG4gICAgVXRpbHNMYW5ndWFnZUNvbnN0YW50cy5FUyxcbiAgICBVdGlsc0xhbmd1YWdlQ29uc3RhbnRzLlpILFxuICAgIFV0aWxzTGFuZ3VhZ2VDb25zdGFudHMuWkhfVFcsXG4gICAgVXRpbHNMYW5ndWFnZUNvbnN0YW50cy5KQSxcbiAgICBVdGlsc0xhbmd1YWdlQ29uc3RhbnRzLktPLFxuICAgIFV0aWxzTGFuZ3VhZ2VDb25zdGFudHMuUlUsXG4gICAgVXRpbHNMYW5ndWFnZUNvbnN0YW50cy5JVCxcbiAgICBVdGlsc0xhbmd1YWdlQ29uc3RhbnRzLlBULFxuICAgIFV0aWxzTGFuZ3VhZ2VDb25zdGFudHMuVEgsXG4gICAgVXRpbHNMYW5ndWFnZUNvbnN0YW50cy5JRCxcbiAgICBVdGlsc0xhbmd1YWdlQ29uc3RhbnRzLk1TLFxuICAgIFV0aWxzTGFuZ3VhZ2VDb25zdGFudHMuQVIsXG4gICAgVXRpbHNMYW5ndWFnZUNvbnN0YW50cy5ISSxcbiAgICBVdGlsc0xhbmd1YWdlQ29uc3RhbnRzLkJOLFxuICAgIFV0aWxzTGFuZ3VhZ2VDb25zdGFudHMuVFIsXG4gICAgVXRpbHNMYW5ndWFnZUNvbnN0YW50cy5OTCxcbiAgICBVdGlsc0xhbmd1YWdlQ29uc3RhbnRzLktNLFxuICAgIFV0aWxzTGFuZ3VhZ2VDb25zdGFudHMuTE8sXG4gICAgVXRpbHNMYW5ndWFnZUNvbnN0YW50cy5NWSxcbiAgICBVdGlsc0xhbmd1YWdlQ29uc3RhbnRzLlRMLFxuICAgIFV0aWxzTGFuZ3VhZ2VDb25zdGFudHMuQ0VCLFxuICAgIFV0aWxzTGFuZ3VhZ2VDb25zdGFudHMuSlYsXG4gICAgVXRpbHNMYW5ndWFnZUNvbnN0YW50cy5TVSxcbiAgXSk7XG5cbiAgcHVibGljIHN0YXRpYyBzZXRTdXBwb3J0ZWRMYW5ndWFnZXMobGFuZ3VhZ2VzOiBBcnJheTxUWVBFX0xBTkdVQUdFX1NVUFBPUlQ+KSB7XG4gICAgaWYgKGxhbmd1YWdlcy5sZW5ndGggPT09IDApIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignTGFuZ3VhZ2VzIGlzIHJlcXVpcmVkJyk7XG4gICAgfVxuICAgIHRoaXMuc3VwcG9ydGVkTGFuZ3VhZ2VzID0gbmV3IFNldChsYW5ndWFnZXMpO1xuICB9XG5cbiAgLyoqXG4gICAqIEtp4buDbSB0cmEgeGVtIG5nw7RuIG5n4buvIMSR4bqndSB2w6BvIGPDsyDEkcaw4bujYyBo4buXIHRy4bujIGtow7RuZ1xuICAgKiBAcGFyYW0gbGFuZyBNw6MgbmfDtG4gbmfhu68gY+G6p24ga2nhu4NtIHRyYVxuICAgKiBAcmV0dXJucyBUcnVlIG7hur91IMSRxrDhu6NjIGjhu5cgdHLhu6MsIEZhbHNlIG7hur91IGtow7RuZ1xuICAgKi9cbiAgcHVibGljIHN0YXRpYyBpc1N1cHBvcnRlZChsYW5nOiBzdHJpbmcpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5zdXBwb3J0ZWRMYW5ndWFnZXMuaGFzKGxhbmcpO1xuICB9XG59XG4iXX0=
@@ -429,8 +429,14 @@ class UtilsLanguageConstants {
429
429
  static CEB = 'ceb'; // Tiếng Cebuano (Philippines)
430
430
  static JV = 'jv'; // Tiếng Java (Indonesia)
431
431
  static SU = 'su'; // Tiếng Sundanese (Indonesia)
432
- // Ngôn ngữ mặc định
433
- static defaultLang = UtilsLanguageConstants.VI;
432
+ static defaultLang = () => {
433
+ const browserLang = 'navigator' in window ? navigator.language || UtilsLanguageConstants.EN : UtilsLanguageConstants.EN;
434
+ const lang = browserLang.split('-')[0] || UtilsLanguageConstants.EN;
435
+ if (UtilsLanguageConstants.isSupported(lang)) {
436
+ return lang;
437
+ }
438
+ return UtilsLanguageConstants.EN;
439
+ };
434
440
  // Danh sách các ngôn ngữ được hỗ trợ
435
441
  static supportedLanguages = new Set([
436
442
  UtilsLanguageConstants.VI,
@@ -461,13 +467,19 @@ class UtilsLanguageConstants {
461
467
  UtilsLanguageConstants.JV,
462
468
  UtilsLanguageConstants.SU,
463
469
  ]);
470
+ static setSupportedLanguages(languages) {
471
+ if (languages.length === 0) {
472
+ throw new Error('Languages is required');
473
+ }
474
+ this.supportedLanguages = new Set(languages);
475
+ }
464
476
  /**
465
477
  * Kiểm tra xem ngôn ngữ đầu vào có được hỗ trợ không
466
478
  * @param lang Mã ngôn ngữ cần kiểm tra
467
479
  * @returns True nếu được hỗ trợ, False nếu không
468
480
  */
469
481
  static isSupported(lang) {
470
- return UtilsLanguageConstants.supportedLanguages.has(lang);
482
+ return this.supportedLanguages.has(lang);
471
483
  }
472
484
  }
473
485