code-languages 1.1.0 → 1.2.0

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.
Files changed (136) hide show
  1. package/README.md +93 -9
  2. package/dist/i18n-BXk47f_R.d.cts +45 -0
  3. package/dist/i18n-BXk47f_R.d.ts +45 -0
  4. package/dist/i18n.cjs +31 -0
  5. package/dist/i18n.cjs.map +1 -0
  6. package/dist/i18n.d.cts +1 -0
  7. package/dist/i18n.d.ts +1 -0
  8. package/dist/i18n.js +29 -0
  9. package/dist/i18n.js.map +1 -0
  10. package/dist/index.cjs +383 -48
  11. package/dist/index.cjs.map +1 -1
  12. package/dist/index.d.cts +9 -27
  13. package/dist/index.d.ts +9 -27
  14. package/dist/index.js +375 -49
  15. package/dist/index.js.map +1 -1
  16. package/dist/languages/bash.cjs +29 -0
  17. package/dist/languages/bash.cjs.map +1 -0
  18. package/dist/languages/bash.d.cts +24 -0
  19. package/dist/languages/bash.d.ts +24 -0
  20. package/dist/languages/bash.js +27 -0
  21. package/dist/languages/bash.js.map +1 -0
  22. package/dist/languages/c.cjs +13 -4
  23. package/dist/languages/c.cjs.map +1 -1
  24. package/dist/languages/c.d.cts +12 -3
  25. package/dist/languages/c.d.ts +12 -3
  26. package/dist/languages/c.js +13 -4
  27. package/dist/languages/c.js.map +1 -1
  28. package/dist/languages/cpp.cjs +29 -0
  29. package/dist/languages/cpp.cjs.map +1 -0
  30. package/dist/languages/cpp.d.cts +24 -0
  31. package/dist/languages/cpp.d.ts +24 -0
  32. package/dist/languages/cpp.js +27 -0
  33. package/dist/languages/cpp.js.map +1 -0
  34. package/dist/languages/css.cjs +13 -4
  35. package/dist/languages/css.cjs.map +1 -1
  36. package/dist/languages/css.d.cts +12 -3
  37. package/dist/languages/css.d.ts +12 -3
  38. package/dist/languages/css.js +13 -4
  39. package/dist/languages/css.js.map +1 -1
  40. package/dist/languages/dockerfile.cjs +29 -0
  41. package/dist/languages/dockerfile.cjs.map +1 -0
  42. package/dist/languages/dockerfile.d.cts +24 -0
  43. package/dist/languages/dockerfile.d.ts +24 -0
  44. package/dist/languages/dockerfile.js +27 -0
  45. package/dist/languages/dockerfile.js.map +1 -0
  46. package/dist/languages/go.cjs +13 -4
  47. package/dist/languages/go.cjs.map +1 -1
  48. package/dist/languages/go.d.cts +12 -3
  49. package/dist/languages/go.d.ts +12 -3
  50. package/dist/languages/go.js +13 -4
  51. package/dist/languages/go.js.map +1 -1
  52. package/dist/languages/groovy.cjs +29 -0
  53. package/dist/languages/groovy.cjs.map +1 -0
  54. package/dist/languages/groovy.d.cts +24 -0
  55. package/dist/languages/groovy.d.ts +24 -0
  56. package/dist/languages/groovy.js +27 -0
  57. package/dist/languages/groovy.js.map +1 -0
  58. package/dist/languages/html.cjs +13 -4
  59. package/dist/languages/html.cjs.map +1 -1
  60. package/dist/languages/html.d.cts +12 -3
  61. package/dist/languages/html.d.ts +12 -3
  62. package/dist/languages/html.js +13 -4
  63. package/dist/languages/html.js.map +1 -1
  64. package/dist/languages/java.cjs +13 -4
  65. package/dist/languages/java.cjs.map +1 -1
  66. package/dist/languages/java.d.cts +12 -3
  67. package/dist/languages/java.d.ts +12 -3
  68. package/dist/languages/java.js +13 -4
  69. package/dist/languages/java.js.map +1 -1
  70. package/dist/languages/javascript.cjs +13 -4
  71. package/dist/languages/javascript.cjs.map +1 -1
  72. package/dist/languages/javascript.d.cts +12 -3
  73. package/dist/languages/javascript.d.ts +12 -3
  74. package/dist/languages/javascript.js +13 -4
  75. package/dist/languages/javascript.js.map +1 -1
  76. package/dist/languages/json.cjs +13 -4
  77. package/dist/languages/json.cjs.map +1 -1
  78. package/dist/languages/json.d.cts +12 -3
  79. package/dist/languages/json.d.ts +12 -3
  80. package/dist/languages/json.js +13 -4
  81. package/dist/languages/json.js.map +1 -1
  82. package/dist/languages/kotlin.cjs +29 -0
  83. package/dist/languages/kotlin.cjs.map +1 -0
  84. package/dist/languages/kotlin.d.cts +24 -0
  85. package/dist/languages/kotlin.d.ts +24 -0
  86. package/dist/languages/kotlin.js +27 -0
  87. package/dist/languages/kotlin.js.map +1 -0
  88. package/dist/languages/markdown.cjs +13 -4
  89. package/dist/languages/markdown.cjs.map +1 -1
  90. package/dist/languages/markdown.d.cts +12 -3
  91. package/dist/languages/markdown.d.ts +12 -3
  92. package/dist/languages/markdown.js +13 -4
  93. package/dist/languages/markdown.js.map +1 -1
  94. package/dist/languages/python.cjs +13 -4
  95. package/dist/languages/python.cjs.map +1 -1
  96. package/dist/languages/python.d.cts +12 -3
  97. package/dist/languages/python.d.ts +12 -3
  98. package/dist/languages/python.js +13 -4
  99. package/dist/languages/python.js.map +1 -1
  100. package/dist/languages/rust.cjs +13 -4
  101. package/dist/languages/rust.cjs.map +1 -1
  102. package/dist/languages/rust.d.cts +12 -3
  103. package/dist/languages/rust.d.ts +12 -3
  104. package/dist/languages/rust.js +13 -4
  105. package/dist/languages/rust.js.map +1 -1
  106. package/dist/languages/sql.cjs +29 -0
  107. package/dist/languages/sql.cjs.map +1 -0
  108. package/dist/languages/sql.d.cts +24 -0
  109. package/dist/languages/sql.d.ts +24 -0
  110. package/dist/languages/sql.js +27 -0
  111. package/dist/languages/sql.js.map +1 -0
  112. package/dist/languages/swift.cjs +29 -0
  113. package/dist/languages/swift.cjs.map +1 -0
  114. package/dist/languages/swift.d.cts +24 -0
  115. package/dist/languages/swift.d.ts +24 -0
  116. package/dist/languages/swift.js +27 -0
  117. package/dist/languages/swift.js.map +1 -0
  118. package/dist/languages/typescript.cjs +13 -4
  119. package/dist/languages/typescript.cjs.map +1 -1
  120. package/dist/languages/typescript.d.cts +12 -3
  121. package/dist/languages/typescript.d.ts +12 -3
  122. package/dist/languages/typescript.js +13 -4
  123. package/dist/languages/typescript.js.map +1 -1
  124. package/dist/languages/xml.cjs +29 -0
  125. package/dist/languages/xml.cjs.map +1 -0
  126. package/dist/languages/xml.d.cts +24 -0
  127. package/dist/languages/xml.d.ts +24 -0
  128. package/dist/languages/xml.js +27 -0
  129. package/dist/languages/xml.js.map +1 -0
  130. package/dist/languages/yaml.cjs +13 -4
  131. package/dist/languages/yaml.cjs.map +1 -1
  132. package/dist/languages/yaml.d.cts +12 -3
  133. package/dist/languages/yaml.d.ts +12 -3
  134. package/dist/languages/yaml.js +13 -4
  135. package/dist/languages/yaml.js.map +1 -1
  136. package/package.json +46 -1
package/README.md CHANGED
@@ -8,7 +8,7 @@
8
8
 
9
9
  Structured metadata for programming languages, packaged as a typed, tree-shakeable TypeScript library.
10
10
 
11
- `code-languages` is useful when you need a small source of truth for language names, slugs, file extensions, release metadata, websites, paradigms, and logos in developer tools, docs sites, learning platforms, or editor-like interfaces. It currently includes metadata for 12 languages.
11
+ `code-languages` is useful when you need a small source of truth for language names, slugs, file extensions, release metadata, websites, paradigms, and logos in developer tools, docs sites, learning platforms, or editor-like interfaces. It currently includes metadata for 20 languages.
12
12
 
13
13
  ## Features
14
14
 
@@ -31,8 +31,12 @@ Import only the language metadata you need:
31
31
 
32
32
  ```ts
33
33
  import { typescript } from "code-languages/typescript";
34
+ import { localizeLanguage } from "code-languages/i18n";
34
35
 
35
- console.log(typescript.name);
36
+ const localized = localizeLanguage(typescript, "en");
37
+
38
+ console.log(localized.name);
39
+ console.log(localized.description);
36
40
  console.log(typescript.extensions);
37
41
  console.log(typescript.paradigms);
38
42
  ```
@@ -40,39 +44,83 @@ console.log(typescript.paradigms);
40
44
  Import multiple languages:
41
45
 
42
46
  ```ts
47
+ import { bash } from "code-languages/bash";
43
48
  import { c } from "code-languages/c";
49
+ import { cpp } from "code-languages/cpp";
44
50
  import { css } from "code-languages/css";
51
+ import { dockerfile } from "code-languages/dockerfile";
52
+ import { groovy } from "code-languages/groovy";
45
53
  import { javascript } from "code-languages/javascript";
46
54
  import { java } from "code-languages/java";
47
55
  import { html } from "code-languages/html";
56
+ import { kotlin } from "code-languages/kotlin";
48
57
  import { markdown } from "code-languages/markdown";
49
58
  import { python } from "code-languages/python";
50
59
  import { json } from "code-languages/json";
60
+ import { sql } from "code-languages/sql";
61
+ import { swift } from "code-languages/swift";
62
+ import { xml } from "code-languages/xml";
51
63
  import { yaml } from "code-languages/yaml";
52
64
 
65
+ console.log(bash.version);
53
66
  console.log(c.extensions);
67
+ console.log(cpp.i18n.en.name);
54
68
  console.log(css.paradigms);
69
+ console.log(dockerfile.i18n.en.name);
70
+ console.log(groovy.version);
55
71
  console.log(javascript.website);
56
72
  console.log(java.version);
57
73
  console.log(html.extensions);
74
+ console.log(kotlin.version);
58
75
  console.log(markdown.website);
59
76
  console.log(python.publishedDate);
60
- console.log(json.description);
77
+ console.log(json.i18n.en.description);
78
+ console.log(sql.i18n.en.name);
79
+ console.log(swift.version);
80
+ console.log(xml.extensions);
61
81
  console.log(yaml.version);
62
82
  ```
63
83
 
64
84
  Import from the package root when bundle size is not a concern:
65
85
 
66
86
  ```ts
67
- import { c, css, go, html, java, json, markdown, rust, typescript, yaml } from "code-languages";
68
-
87
+ import {
88
+ bash,
89
+ c,
90
+ cpp,
91
+ css,
92
+ dockerfile,
93
+ go,
94
+ groovy,
95
+ html,
96
+ java,
97
+ json,
98
+ kotlin,
99
+ localizeLanguage,
100
+ markdown,
101
+ rust,
102
+ sql,
103
+ swift,
104
+ typescript,
105
+ xml,
106
+ yaml,
107
+ } from "code-languages";
108
+
109
+ console.log(localizeLanguage(bash, "es").description);
69
110
  console.log(c.version);
70
- console.log(css.name);
71
- console.log(java.name);
111
+ console.log(cpp.website);
112
+ console.log(localizeLanguage(css).name);
113
+ console.log(dockerfile.website);
114
+ console.log(localizeLanguage(groovy).description);
115
+ console.log(localizeLanguage(java).name);
72
116
  console.log(html.website);
117
+ console.log(localizeLanguage(kotlin, "es-PE").description);
73
118
  console.log(markdown.extensions);
74
119
  console.log(go.logo);
75
120
  console.log(json.website);
121
+ console.log(sql.extensions);
122
+ console.log(swift.i18n.en.description);
123
+ console.log(localizeLanguage(xml, "es").name);
76
124
  console.log(yaml.paradigms);
77
125
  ```
78
126
 
@@ -81,11 +129,16 @@ console.log(yaml.paradigms);
81
129
  Every language object satisfies the `Language` interface:
82
130
 
83
131
  ```ts
84
- export interface Language {
132
+ export type Locale = "en" | "es";
133
+
134
+ export interface LanguageContent {
85
135
  name: string;
86
- slug: string;
87
136
  description: string;
88
137
  longDescription: string;
138
+ }
139
+
140
+ export interface Language {
141
+ slug: string;
89
142
  publishedDate: string;
90
143
  extensions: string[];
91
144
  author: string;
@@ -93,21 +146,52 @@ export interface Language {
93
146
  paradigms: string[];
94
147
  version: string;
95
148
  logo: string;
149
+ i18n: {
150
+ en: LanguageContent;
151
+ es?: LanguageContent;
152
+ };
96
153
  }
97
154
  ```
98
155
 
156
+ Use `localizeLanguage` to read localized display content with English fallback:
157
+
158
+ ```ts
159
+ import { json } from "code-languages/json";
160
+ import { localizeLanguage } from "code-languages/i18n";
161
+
162
+ const language = localizeLanguage(json, "es-PE");
163
+
164
+ console.log(language.name);
165
+ console.log(language.longDescription);
166
+ console.log(language.resolvedLocale); // "es"
167
+ ```
168
+
169
+ `localizeLanguage` resolves locales in this order:
170
+
171
+ 1. Exact locale, for example `es`.
172
+ 2. Base language from a regional locale, for example `es-PE` -> `es`.
173
+ 3. English fallback, for example `fr-FR` -> `en`.
174
+
99
175
  ## Supported Languages
100
176
 
101
177
  | Language | Slug | Extensions | Version | Import |
102
178
  |---|---|---|---|---|
179
+ | Bash | `bash` | `.sh`, `.bash`, `.bashrc`, `.bash_profile`, `.bash_login`, `.profile` | `5.3` | `code-languages/bash` |
103
180
  | C | `c` | `.c`, `.h` | `C23` | `code-languages/c` |
181
+ | C++ | `cpp` | `.cpp`, `.cc`, `.cxx`, `.hpp`, `.hh`, `.hxx` | `C++23` | `code-languages/cpp` |
182
+ | Dockerfile | `dockerfile` | `Dockerfile`, `.dockerfile` | `1.10` | `code-languages/dockerfile` |
183
+ | Groovy | `groovy` | `.groovy`, `.gvy`, `.gy`, `.gsh` | `5.0.5` | `code-languages/groovy` |
104
184
  | TypeScript | `typescript` | `.ts`, `.tsx`, `.mts`, `.cts` | `6.0` | `code-languages/typescript` |
105
185
  | JavaScript | `javascript` | `.js`, `.mjs`, `.cjs`, `.jsx` | `ECMAScript 2025` | `code-languages/javascript` |
106
186
  | JSON | `json` | `.json` | `RFC 8259` | `code-languages/json` |
187
+ | SQL | `sql` | `.sql` | `SQL:2023` | `code-languages/sql` |
107
188
  | Java | `java` | `.java` | `26` | `code-languages/java` |
189
+ | Swift | `swift` | `.swift` | `6.2.2` | `code-languages/swift` |
190
+ | Kotlin | `kotlin` | `.kt`, `.kts` | `2.3.20` | `code-languages/kotlin` |
108
191
  | HTML | `html` | `.html`, `.htm` | `Living Standard` | `code-languages/html` |
109
192
  | CSS | `css` | `.css` | `Living Standard` | `code-languages/css` |
110
193
  | Markdown | `markdown` | `.md`, `.markdown`, `.mdown`, `.mkd` | `CommonMark 0.31.2` | `code-languages/markdown` |
194
+ | XML | `xml` | `.xml`, `.xsd`, `.xsl`, `.xslt` | `XML 1.0 Fifth Edition` | `code-languages/xml` |
111
195
  | YAML | `yaml` | `.yaml`, `.yml` | `1.2.2` | `code-languages/yaml` |
112
196
  | Python | `python` | `.py`, `.pyw` | `3.14.4` | `code-languages/python` |
113
197
  | Rust | `rust` | `.rs` | `1.95.0` | `code-languages/rust` |
@@ -0,0 +1,45 @@
1
+ type BaseLocale = "en" | "es";
2
+ type Locale = BaseLocale | `${BaseLocale}-${string}` | (string & {});
3
+ interface LanguageContent {
4
+ /** Display name. e.g. "TypeScript" */
5
+ name: string;
6
+ /** One-line summary, max 160 characters. */
7
+ description: string;
8
+ /** Rich multi-paragraph description in plain text. */
9
+ longDescription: string;
10
+ }
11
+ type LanguageTranslations = {
12
+ en: LanguageContent;
13
+ } & Partial<Record<BaseLocale, LanguageContent>>;
14
+ interface Language {
15
+ /** URL-safe identifier. e.g. "typescript" */
16
+ slug: string;
17
+ /** ISO 8601 date of first public release. e.g. "2012-10-01" */
18
+ publishedDate: string;
19
+ /** All file extensions associated with the language. e.g. [".ts", ".tsx"] */
20
+ extensions: string[];
21
+ /** Original author or organization. e.g. "Anders Hejlsberg / Microsoft" */
22
+ author: string;
23
+ /** Official website URL. e.g. "https://www.typescriptlang.org" */
24
+ website: string;
25
+ /** Programming paradigms. e.g. ["object-oriented", "functional", "imperative"] */
26
+ paradigms: string[];
27
+ /** Latest stable version at time of last data update. e.g. "5.4.5" */
28
+ version: string;
29
+ /** URL to the official language logo or icon. */
30
+ logo: string;
31
+ /** Localized display content. English is required as the fallback locale. */
32
+ i18n: LanguageTranslations;
33
+ }
34
+ type LocalizedLanguage = Omit<Language, "i18n"> & LanguageContent & {
35
+ /** Locale requested by the caller. */
36
+ locale: Locale;
37
+ /** Translation locale actually used after exact, base-language, and English fallback resolution. */
38
+ resolvedLocale: BaseLocale;
39
+ /** Base locales available for this language. */
40
+ availableLocales: BaseLocale[];
41
+ };
42
+
43
+ declare const localizeLanguage: (language: Language, locale?: Locale) => LocalizedLanguage;
44
+
45
+ export { type Language as L, type LanguageContent as a, type LanguageTranslations as b, type Locale as c, type LocalizedLanguage as d, localizeLanguage as l };
@@ -0,0 +1,45 @@
1
+ type BaseLocale = "en" | "es";
2
+ type Locale = BaseLocale | `${BaseLocale}-${string}` | (string & {});
3
+ interface LanguageContent {
4
+ /** Display name. e.g. "TypeScript" */
5
+ name: string;
6
+ /** One-line summary, max 160 characters. */
7
+ description: string;
8
+ /** Rich multi-paragraph description in plain text. */
9
+ longDescription: string;
10
+ }
11
+ type LanguageTranslations = {
12
+ en: LanguageContent;
13
+ } & Partial<Record<BaseLocale, LanguageContent>>;
14
+ interface Language {
15
+ /** URL-safe identifier. e.g. "typescript" */
16
+ slug: string;
17
+ /** ISO 8601 date of first public release. e.g. "2012-10-01" */
18
+ publishedDate: string;
19
+ /** All file extensions associated with the language. e.g. [".ts", ".tsx"] */
20
+ extensions: string[];
21
+ /** Original author or organization. e.g. "Anders Hejlsberg / Microsoft" */
22
+ author: string;
23
+ /** Official website URL. e.g. "https://www.typescriptlang.org" */
24
+ website: string;
25
+ /** Programming paradigms. e.g. ["object-oriented", "functional", "imperative"] */
26
+ paradigms: string[];
27
+ /** Latest stable version at time of last data update. e.g. "5.4.5" */
28
+ version: string;
29
+ /** URL to the official language logo or icon. */
30
+ logo: string;
31
+ /** Localized display content. English is required as the fallback locale. */
32
+ i18n: LanguageTranslations;
33
+ }
34
+ type LocalizedLanguage = Omit<Language, "i18n"> & LanguageContent & {
35
+ /** Locale requested by the caller. */
36
+ locale: Locale;
37
+ /** Translation locale actually used after exact, base-language, and English fallback resolution. */
38
+ resolvedLocale: BaseLocale;
39
+ /** Base locales available for this language. */
40
+ availableLocales: BaseLocale[];
41
+ };
42
+
43
+ declare const localizeLanguage: (language: Language, locale?: Locale) => LocalizedLanguage;
44
+
45
+ export { type Language as L, type LanguageContent as a, type LanguageTranslations as b, type Locale as c, type LocalizedLanguage as d, localizeLanguage as l };
package/dist/i18n.cjs ADDED
@@ -0,0 +1,31 @@
1
+ 'use strict';
2
+
3
+ // src/i18n.ts
4
+ var localizeLanguage = (language, locale = "en") => {
5
+ const { i18n, ...metadata } = language;
6
+ const resolvedLocale = resolveLocale(i18n, locale);
7
+ const content = i18n[resolvedLocale] ?? i18n.en;
8
+ return {
9
+ ...metadata,
10
+ ...content,
11
+ locale,
12
+ resolvedLocale,
13
+ availableLocales: Object.keys(i18n)
14
+ };
15
+ };
16
+ var resolveLocale = (translations, locale) => {
17
+ const normalizedLocale = locale.toLowerCase();
18
+ const exactLocale = normalizedLocale;
19
+ if (translations[exactLocale]) {
20
+ return exactLocale;
21
+ }
22
+ const baseLocale = normalizedLocale.split("-")[0];
23
+ if (translations[baseLocale]) {
24
+ return baseLocale;
25
+ }
26
+ return "en";
27
+ };
28
+
29
+ exports.localizeLanguage = localizeLanguage;
30
+ //# sourceMappingURL=i18n.cjs.map
31
+ //# sourceMappingURL=i18n.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/i18n.ts"],"names":[],"mappings":";;;AAEO,IAAM,gBAAA,GAAmB,CAAC,QAAA,EAAoB,MAAA,GAAiB,IAAA,KAA4B;AAChG,EAAA,MAAM,EAAE,IAAA,EAAM,GAAG,QAAA,EAAS,GAAI,QAAA;AAC9B,EAAA,MAAM,cAAA,GAAiB,aAAA,CAAc,IAAA,EAAM,MAAM,CAAA;AACjD,EAAA,MAAM,OAAA,GAAU,IAAA,CAAK,cAAc,CAAA,IAAK,IAAA,CAAK,EAAA;AAE7C,EAAA,OAAO;AAAA,IACL,GAAG,QAAA;AAAA,IACH,GAAG,OAAA;AAAA,IACH,MAAA;AAAA,IACA,cAAA;AAAA,IACA,gBAAA,EAAkB,MAAA,CAAO,IAAA,CAAK,IAAI;AAAA,GACpC;AACF;AAEA,IAAM,aAAA,GAAgB,CAAC,YAAA,EAAgC,MAAA,KAA+B;AACpF,EAAA,MAAM,gBAAA,GAAmB,OAAO,WAAA,EAAY;AAC5C,EAAA,MAAM,WAAA,GAAc,gBAAA;AAEpB,EAAA,IAAI,YAAA,CAAa,WAAW,CAAA,EAAG;AAC7B,IAAA,OAAO,WAAA;AAAA,EACT;AAEA,EAAA,MAAM,UAAA,GAAa,gBAAA,CAAiB,KAAA,CAAM,GAAG,EAAE,CAAC,CAAA;AAEhD,EAAA,IAAI,YAAA,CAAa,UAAU,CAAA,EAAG;AAC5B,IAAA,OAAO,UAAA;AAAA,EACT;AAEA,EAAA,OAAO,IAAA;AACT,CAAA","file":"i18n.cjs","sourcesContent":["import type { BaseLocale, Language, Locale, LocalizedLanguage } from \"./types\";\n\nexport const localizeLanguage = (language: Language, locale: Locale = \"en\"): LocalizedLanguage => {\n const { i18n, ...metadata } = language;\n const resolvedLocale = resolveLocale(i18n, locale);\n const content = i18n[resolvedLocale] ?? i18n.en;\n\n return {\n ...metadata,\n ...content,\n locale,\n resolvedLocale,\n availableLocales: Object.keys(i18n) as BaseLocale[],\n };\n};\n\nconst resolveLocale = (translations: Language[\"i18n\"], locale: Locale): BaseLocale => {\n const normalizedLocale = locale.toLowerCase();\n const exactLocale = normalizedLocale as BaseLocale;\n\n if (translations[exactLocale]) {\n return exactLocale;\n }\n\n const baseLocale = normalizedLocale.split(\"-\")[0] as BaseLocale;\n\n if (translations[baseLocale]) {\n return baseLocale;\n }\n\n return \"en\";\n};\n"]}
@@ -0,0 +1 @@
1
+ export { l as localizeLanguage } from './i18n-BXk47f_R.cjs';
package/dist/i18n.d.ts ADDED
@@ -0,0 +1 @@
1
+ export { l as localizeLanguage } from './i18n-BXk47f_R.js';
package/dist/i18n.js ADDED
@@ -0,0 +1,29 @@
1
+ // src/i18n.ts
2
+ var localizeLanguage = (language, locale = "en") => {
3
+ const { i18n, ...metadata } = language;
4
+ const resolvedLocale = resolveLocale(i18n, locale);
5
+ const content = i18n[resolvedLocale] ?? i18n.en;
6
+ return {
7
+ ...metadata,
8
+ ...content,
9
+ locale,
10
+ resolvedLocale,
11
+ availableLocales: Object.keys(i18n)
12
+ };
13
+ };
14
+ var resolveLocale = (translations, locale) => {
15
+ const normalizedLocale = locale.toLowerCase();
16
+ const exactLocale = normalizedLocale;
17
+ if (translations[exactLocale]) {
18
+ return exactLocale;
19
+ }
20
+ const baseLocale = normalizedLocale.split("-")[0];
21
+ if (translations[baseLocale]) {
22
+ return baseLocale;
23
+ }
24
+ return "en";
25
+ };
26
+
27
+ export { localizeLanguage };
28
+ //# sourceMappingURL=i18n.js.map
29
+ //# sourceMappingURL=i18n.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/i18n.ts"],"names":[],"mappings":";AAEO,IAAM,gBAAA,GAAmB,CAAC,QAAA,EAAoB,MAAA,GAAiB,IAAA,KAA4B;AAChG,EAAA,MAAM,EAAE,IAAA,EAAM,GAAG,QAAA,EAAS,GAAI,QAAA;AAC9B,EAAA,MAAM,cAAA,GAAiB,aAAA,CAAc,IAAA,EAAM,MAAM,CAAA;AACjD,EAAA,MAAM,OAAA,GAAU,IAAA,CAAK,cAAc,CAAA,IAAK,IAAA,CAAK,EAAA;AAE7C,EAAA,OAAO;AAAA,IACL,GAAG,QAAA;AAAA,IACH,GAAG,OAAA;AAAA,IACH,MAAA;AAAA,IACA,cAAA;AAAA,IACA,gBAAA,EAAkB,MAAA,CAAO,IAAA,CAAK,IAAI;AAAA,GACpC;AACF;AAEA,IAAM,aAAA,GAAgB,CAAC,YAAA,EAAgC,MAAA,KAA+B;AACpF,EAAA,MAAM,gBAAA,GAAmB,OAAO,WAAA,EAAY;AAC5C,EAAA,MAAM,WAAA,GAAc,gBAAA;AAEpB,EAAA,IAAI,YAAA,CAAa,WAAW,CAAA,EAAG;AAC7B,IAAA,OAAO,WAAA;AAAA,EACT;AAEA,EAAA,MAAM,UAAA,GAAa,gBAAA,CAAiB,KAAA,CAAM,GAAG,EAAE,CAAC,CAAA;AAEhD,EAAA,IAAI,YAAA,CAAa,UAAU,CAAA,EAAG;AAC5B,IAAA,OAAO,UAAA;AAAA,EACT;AAEA,EAAA,OAAO,IAAA;AACT,CAAA","file":"i18n.js","sourcesContent":["import type { BaseLocale, Language, Locale, LocalizedLanguage } from \"./types\";\n\nexport const localizeLanguage = (language: Language, locale: Locale = \"en\"): LocalizedLanguage => {\n const { i18n, ...metadata } = language;\n const resolvedLocale = resolveLocale(i18n, locale);\n const content = i18n[resolvedLocale] ?? i18n.en;\n\n return {\n ...metadata,\n ...content,\n locale,\n resolvedLocale,\n availableLocales: Object.keys(i18n) as BaseLocale[],\n };\n};\n\nconst resolveLocale = (translations: Language[\"i18n\"], locale: Locale): BaseLocale => {\n const normalizedLocale = locale.toLowerCase();\n const exactLocale = normalizedLocale as BaseLocale;\n\n if (translations[exactLocale]) {\n return exactLocale;\n }\n\n const baseLocale = normalizedLocale.split(\"-\")[0] as BaseLocale;\n\n if (translations[baseLocale]) {\n return baseLocale;\n }\n\n return \"en\";\n};\n"]}