material-icon-theme 4.18.0 → 4.20.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 (208) hide show
  1. package/.eslintrc.json +51 -51
  2. package/.github/FUNDING.yml +3 -3
  3. package/.github/ISSUE_TEMPLATE/bug_report.md +34 -34
  4. package/.github/ISSUE_TEMPLATE/icon_request.md +27 -27
  5. package/.github/workflows/build.yml +45 -45
  6. package/.github/workflows/color-check.yml +22 -22
  7. package/.github/workflows/release.yml +73 -73
  8. package/.prettierrc +7 -7
  9. package/.vscode/extensions.json +3 -3
  10. package/.vscode/launch.json +43 -43
  11. package/.vscode/settings.json +14 -14
  12. package/.vscode/tasks.json +32 -32
  13. package/.vscodeignore +20 -20
  14. package/CHANGELOG.md +1213 -1171
  15. package/CONTRIBUTING.md +62 -62
  16. package/LICENSE.md +8 -8
  17. package/README.md +208 -208
  18. package/build/web-extension.webpack.config.js +62 -62
  19. package/build/webpack.config.js +39 -39
  20. package/changelog.config.json +4 -4
  21. package/icons/architecture.svg +4 -4
  22. package/icons/astyle.svg +4 -4
  23. package/icons/auto.svg +10 -0
  24. package/icons/auto_light.svg +10 -0
  25. package/icons/azure.svg +9 -9
  26. package/icons/blitz.svg +4 -4
  27. package/icons/buildkite.svg +8 -8
  28. package/icons/cypress.svg +4 -4
  29. package/icons/dart_generated.svg +9 -9
  30. package/icons/dependabot.svg +4 -4
  31. package/icons/dinophp.svg +16 -16
  32. package/icons/figma.svg +10 -10
  33. package/icons/folder-angular-open.svg +2 -2
  34. package/icons/folder-angular.svg +2 -2
  35. package/icons/folder-buildkite-open.svg +8 -8
  36. package/icons/folder-buildkite.svg +7 -7
  37. package/icons/folder-cypress-open.svg +5 -5
  38. package/icons/folder-cypress.svg +5 -5
  39. package/icons/folder-gitlab-open.svg +2 -1
  40. package/icons/folder-gitlab.svg +2 -1
  41. package/icons/folder-java-open.svg +2 -2
  42. package/icons/folder-java.svg +2 -2
  43. package/icons/folder-next-open.svg +2 -2
  44. package/icons/folder-next.svg +2 -2
  45. package/icons/folder-nuxt-open.svg +2 -2
  46. package/icons/folder-nuxt.svg +2 -2
  47. package/icons/folder-queue-open.svg +2 -2
  48. package/icons/folder-queue.svg +2 -2
  49. package/icons/folder-resolver-open.svg +2 -2
  50. package/icons/folder-resolver.svg +2 -2
  51. package/icons/folder-serverless-open.svg +5 -5
  52. package/icons/folder-serverless.svg +5 -5
  53. package/icons/folder-shader-open.svg +7 -7
  54. package/icons/folder-shader.svg +6 -6
  55. package/icons/folder-target-open.svg +2 -2
  56. package/icons/folder-target.svg +2 -2
  57. package/icons/folder-unity-open.svg +2 -2
  58. package/icons/folder-unity.svg +2 -2
  59. package/icons/folder-vercel-open.svg +4 -4
  60. package/icons/folder-vercel.svg +4 -4
  61. package/icons/folder-verdaccio-open.svg +8 -8
  62. package/icons/folder-verdaccio.svg +8 -8
  63. package/icons/gitlab.svg +1 -1
  64. package/icons/gleam.svg +4 -4
  65. package/icons/gridsome.svg +4 -4
  66. package/icons/hardhat.svg +3 -3
  67. package/icons/lighthouse.svg +2 -2
  68. package/icons/mdsvex.svg +5 -0
  69. package/icons/ndst.svg +7 -7
  70. package/icons/next.svg +3 -3
  71. package/icons/next_light.svg +2 -2
  72. package/icons/nuxt.svg +5 -5
  73. package/icons/odin.svg +6 -6
  74. package/icons/otne.svg +16 -16
  75. package/icons/parcel.svg +4 -4
  76. package/icons/playwright.svg +7 -7
  77. package/icons/plop.svg +4 -4
  78. package/icons/pnpm.svg +9 -9
  79. package/icons/pnpm_light.svg +7 -7
  80. package/icons/poetry.svg +1 -1
  81. package/icons/processing.svg +10 -10
  82. package/icons/remix.svg +4 -4
  83. package/icons/remix_light.svg +4 -4
  84. package/icons/rescript-interface.svg +5 -5
  85. package/icons/rome.svg +5 -5
  86. package/icons/serverless.svg +4 -4
  87. package/icons/shader.svg +4 -4
  88. package/icons/siyuan.svg +9 -9
  89. package/icons/steadybit.svg +1 -1
  90. package/icons/svgr.svg +4 -4
  91. package/icons/tauri.svg +9 -9
  92. package/icons/template.svg +4 -4
  93. package/icons/tobi.svg +4 -4
  94. package/icons/tobimake.svg +14 -14
  95. package/icons/tree.svg +2 -0
  96. package/icons/turborepo.svg +12 -12
  97. package/icons/turborepo_light.svg +12 -12
  98. package/icons/verdaccio.svg +5 -5
  99. package/images/contributors.png +0 -0
  100. package/images/fileIcons.png +0 -0
  101. package/images/folderIcons.png +0 -0
  102. package/logo.svg +21 -21
  103. package/material-colors.yml +257 -257
  104. package/package.json +267 -264
  105. package/package.nls.de.json +35 -35
  106. package/package.nls.es.json +32 -32
  107. package/package.nls.fr.json +32 -32
  108. package/package.nls.ja.json +35 -35
  109. package/package.nls.json +35 -35
  110. package/package.nls.nl.json +35 -35
  111. package/package.nls.pl.json +35 -35
  112. package/package.nls.pt-BR.json +32 -32
  113. package/package.nls.pt-PT.json +32 -32
  114. package/package.nls.ru.json +32 -32
  115. package/package.nls.zh-CN.json +32 -32
  116. package/package.nls.zh-TW.json +32 -32
  117. package/src/commands/activate.ts +26 -26
  118. package/src/commands/explorerArrows.ts +55 -55
  119. package/src/commands/folderColor.ts +96 -96
  120. package/src/commands/folders.ts +55 -55
  121. package/src/commands/grayscale.ts +55 -55
  122. package/src/commands/iconPacks.ts +68 -68
  123. package/src/commands/index.ts +30 -30
  124. package/src/commands/opacity.ts +46 -46
  125. package/src/commands/restoreConfig.ts +14 -14
  126. package/src/commands/saturation.ts +46 -46
  127. package/src/extension.ts +42 -42
  128. package/src/helpers/changeDetection.ts +109 -73
  129. package/src/helpers/customIcons.ts +8 -8
  130. package/src/helpers/fileConfig.ts +37 -37
  131. package/src/helpers/index.ts +100 -100
  132. package/src/helpers/objects.ts +58 -58
  133. package/src/helpers/types.ts +7 -7
  134. package/src/helpers/versioning.ts +73 -73
  135. package/src/i18n/index.ts +78 -78
  136. package/src/i18n/lang-de.ts +54 -54
  137. package/src/i18n/lang-en.ts +53 -53
  138. package/src/i18n/lang-es.ts +53 -53
  139. package/src/i18n/lang-fr.ts +53 -53
  140. package/src/i18n/lang-ja.ts +54 -54
  141. package/src/i18n/lang-nl.ts +54 -54
  142. package/src/i18n/lang-pl.ts +52 -52
  143. package/src/i18n/lang-pt-br.ts +53 -53
  144. package/src/i18n/lang-pt-pt.ts +53 -53
  145. package/src/i18n/lang-ru.ts +52 -52
  146. package/src/i18n/lang-uk.ts +54 -54
  147. package/src/i18n/lang-zh-cn.ts +52 -52
  148. package/src/i18n/lang-zh-tw.ts +52 -52
  149. package/src/icons/fileIcons.ts +2095 -2046
  150. package/src/icons/folderIcons.ts +781 -773
  151. package/src/icons/generator/constants.ts +29 -29
  152. package/src/icons/generator/fileGenerator.ts +216 -216
  153. package/src/icons/generator/folderGenerator.ts +340 -340
  154. package/src/icons/generator/iconOpacity.ts +111 -111
  155. package/src/icons/generator/iconSaturation.ts +140 -140
  156. package/src/icons/generator/index.ts +7 -7
  157. package/src/icons/generator/jsonGenerator.ts +187 -187
  158. package/src/icons/generator/languageGenerator.ts +127 -127
  159. package/src/icons/index.ts +4 -4
  160. package/src/icons/languageIcons.ts +137 -136
  161. package/src/messages/outdated.ts +33 -33
  162. package/src/messages/reload.ts +32 -32
  163. package/src/messages/start.ts +12 -12
  164. package/src/messages/update.ts +48 -48
  165. package/src/messages/welcome.ts +47 -47
  166. package/src/models/helpers/index.ts +1 -1
  167. package/src/models/helpers/themeStatus.ts +5 -5
  168. package/src/models/i18n/index.ts +1 -1
  169. package/src/models/i18n/translation.ts +50 -50
  170. package/src/models/iconConfiguration.ts +37 -37
  171. package/src/models/icons/defaultIcon.ts +16 -16
  172. package/src/models/icons/files/fileIcon.ts +49 -49
  173. package/src/models/icons/files/fileTypes.ts +14 -14
  174. package/src/models/icons/files/index.ts +2 -2
  175. package/src/models/icons/folders/folderIcon.ts +34 -34
  176. package/src/models/icons/folders/folderTheme.ts +23 -23
  177. package/src/models/icons/folders/index.ts +2 -2
  178. package/src/models/icons/iconJsonOptions.ts +23 -23
  179. package/src/models/icons/iconPack.ts +12 -12
  180. package/src/models/icons/index.ts +6 -6
  181. package/src/models/icons/languages/index.ts +1 -1
  182. package/src/models/icons/languages/languageIdentifier.ts +26 -26
  183. package/src/models/index.ts +4 -4
  184. package/src/models/scripts/contributors/contributor.ts +22 -22
  185. package/src/models/scripts/contributors/contributorsConfig.ts +10 -10
  186. package/src/scripts/contributors/contributors.css +24 -24
  187. package/src/scripts/contributors/index.ts +138 -138
  188. package/src/scripts/helpers/painter.ts +5 -5
  189. package/src/scripts/helpers/screenshots.ts +32 -32
  190. package/src/scripts/helpers/similarity.ts +47 -47
  191. package/src/scripts/helpers/titleCase.ts +7 -7
  192. package/src/scripts/icons/checks/checkIconAvailability.ts +215 -215
  193. package/src/scripts/icons/checks/checkIconConflicts.ts +154 -154
  194. package/src/scripts/icons/checks/checkIconUsage.ts +141 -141
  195. package/src/scripts/icons/checks/index.ts +7 -7
  196. package/src/scripts/icons/generateJson.ts +11 -11
  197. package/src/scripts/preview/index.ts +40 -40
  198. package/src/scripts/preview/preview.ts +165 -165
  199. package/src/scripts/preview/style.css +48 -48
  200. package/src/test/runTest.ts +26 -26
  201. package/src/test/spec/i18n/i18n.spec.ts +61 -61
  202. package/src/test/spec/icons/fileIcons.spec.ts +250 -250
  203. package/src/test/spec/icons/folderIcons.spec.ts +418 -418
  204. package/src/test/spec/icons/languageIcons.spec.ts +184 -184
  205. package/src/test/spec/index.ts +36 -36
  206. package/src/web/extension.ts +10 -10
  207. package/svgo.config.js +11 -11
  208. package/tsconfig.json +23 -23
@@ -1,58 +1,58 @@
1
- /**
2
- * Get the nested properties of an object.
3
- * This solution is lighter than the lodash get-version.
4
- * Source: http://stackoverflow.com/a/6491621/6942210
5
- */
6
- export const getObjectPropertyValue = (obj: Object, path: string) => {
7
- const pathArray = path
8
- .replace(/\[(\w+)\]/g, '.$1') // convert indexes to properties
9
- .replace(/^\./, '') // strip a leading dot
10
- .split('.'); // separate paths in array
11
-
12
- /** Avoid errors in the getValue function. */
13
- const isObject = (object: unknown) => {
14
- return object === Object(object);
15
- };
16
- let result = JSON.parse(JSON.stringify(obj));
17
-
18
- for (let i = 0; i < pathArray.length; ++i) {
19
- const k = pathArray[i];
20
- if (isObject(result) && k in result) {
21
- result = result[k];
22
- } else {
23
- return;
24
- }
25
- }
26
- return result;
27
- };
28
-
29
- /**
30
- * Set a value for a nested object property.
31
- * @param obj Object
32
- * @param path Properties as string e.g. `'a.b.c'`
33
- * @param value Value to be set for the given property
34
- * Source: https://stackoverflow.com/a/13719799/6942210
35
- */
36
- export const setObjectPropertyValue = (
37
- obj: { [key: string]: any },
38
- path: string | string[],
39
- value: any
40
- ) => {
41
- if (typeof path === 'string') {
42
- path = path.split('.');
43
- }
44
-
45
- if (path.length > 1) {
46
- const e = path.shift() ?? '';
47
- setObjectPropertyValue(
48
- (obj[e] =
49
- Object.prototype.toString.call(obj[e]) === '[object Object]'
50
- ? obj[e]
51
- : {}),
52
- path,
53
- value
54
- );
55
- } else {
56
- obj[path[0]] = value;
57
- }
58
- };
1
+ /**
2
+ * Get the nested properties of an object.
3
+ * This solution is lighter than the lodash get-version.
4
+ * Source: http://stackoverflow.com/a/6491621/6942210
5
+ */
6
+ export const getObjectPropertyValue = (obj: Object, path: string) => {
7
+ const pathArray = path
8
+ .replace(/\[(\w+)\]/g, '.$1') // convert indexes to properties
9
+ .replace(/^\./, '') // strip a leading dot
10
+ .split('.'); // separate paths in array
11
+
12
+ /** Avoid errors in the getValue function. */
13
+ const isObject = (object: unknown) => {
14
+ return object === Object(object);
15
+ };
16
+ let result = JSON.parse(JSON.stringify(obj));
17
+
18
+ for (let i = 0; i < pathArray.length; ++i) {
19
+ const k = pathArray[i];
20
+ if (isObject(result) && k in result) {
21
+ result = result[k];
22
+ } else {
23
+ return;
24
+ }
25
+ }
26
+ return result;
27
+ };
28
+
29
+ /**
30
+ * Set a value for a nested object property.
31
+ * @param obj Object
32
+ * @param path Properties as string e.g. `'a.b.c'`
33
+ * @param value Value to be set for the given property
34
+ * Source: https://stackoverflow.com/a/13719799/6942210
35
+ */
36
+ export const setObjectPropertyValue = (
37
+ obj: { [key: string]: any },
38
+ path: string | string[],
39
+ value: any
40
+ ) => {
41
+ if (typeof path === 'string') {
42
+ path = path.split('.');
43
+ }
44
+
45
+ if (path.length > 1) {
46
+ const e = path.shift() ?? '';
47
+ setObjectPropertyValue(
48
+ (obj[e] =
49
+ Object.prototype.toString.call(obj[e]) === '[object Object]'
50
+ ? obj[e]
51
+ : {}),
52
+ path,
53
+ value
54
+ );
55
+ } else {
56
+ obj[path[0]] = value;
57
+ }
58
+ };
@@ -1,7 +1,7 @@
1
- export type RequireAtLeastOne<T, Keys extends keyof T = keyof T> = Pick<
2
- T,
3
- Exclude<keyof T, Keys>
4
- > &
5
- {
6
- [K in Keys]-?: Required<Pick<T, K>> & Partial<Pick<T, Exclude<Keys, K>>>;
7
- }[Keys];
1
+ export type RequireAtLeastOne<T, Keys extends keyof T = keyof T> = Pick<
2
+ T,
3
+ Exclude<keyof T, Keys>
4
+ > &
5
+ {
6
+ [K in Keys]-?: Required<Pick<T, K>> & Partial<Pick<T, Exclude<Keys, K>>>;
7
+ }[Keys];
@@ -1,73 +1,73 @@
1
- import { extensions, Memento, workspace } from 'vscode';
2
- import { isThemeActivated } from '.';
3
- import { ThemeStatus } from '../models/helpers/themeStatus';
4
-
5
- /** Get configuration of vs code. */
6
- export const getConfig = (section?: string) => {
7
- return workspace.getConfiguration(section);
8
- };
9
-
10
- export const versionKey = 'material-icon-theme.version';
11
-
12
- /**
13
- * Check the current status of the theme
14
- * @param state Global state of context (Memento API)
15
- */
16
- export const checkThemeStatus = async (
17
- state: Memento
18
- ): Promise<ThemeStatus> => {
19
- try {
20
- // get the version from the state
21
- const stateVersion = state.get(versionKey);
22
- const packageVersion = getCurrentExtensionVersion();
23
-
24
- // check if the theme was used before
25
- if (stateVersion === undefined || typeof stateVersion !== 'string') {
26
- await updateExtensionVersionInMemento(state);
27
- return themeIsAlreadyActivated()
28
- ? ThemeStatus.updated
29
- : ThemeStatus.neverUsedBefore;
30
- }
31
- // compare the version in the state with the package version
32
- else if (packageVersion && isGreaterVersion(packageVersion, stateVersion)) {
33
- await updateExtensionVersionInMemento(state);
34
- return ThemeStatus.updated;
35
- } else {
36
- return ThemeStatus.current;
37
- }
38
- } catch (error) {
39
- console.error(error);
40
- return ThemeStatus.current;
41
- }
42
- };
43
-
44
- /**
45
- * Compares two version numbers (e.g. 1.0.0 with 1.0.1)
46
- * @param a version b
47
- * @param b version a
48
- * @returns true if version `a` is greater than version `b`
49
- */
50
- const isGreaterVersion = (a: string, b: string): boolean => {
51
- return (
52
- a.localeCompare(b, undefined, { numeric: true, sensitivity: 'base' }) === 1
53
- );
54
- };
55
-
56
- /** Check if the theme was used before */
57
- const themeIsAlreadyActivated = () => {
58
- return isThemeActivated() || isThemeActivated(true);
59
- };
60
-
61
- /** Update the version number to the current version in the memento. */
62
- const updateExtensionVersionInMemento = (state: Memento) => {
63
- const currentVersion = getCurrentExtensionVersion();
64
- if (currentVersion) {
65
- return state.update(versionKey, currentVersion);
66
- }
67
- };
68
-
69
- /** Get the current version of the extension */
70
- const getCurrentExtensionVersion = (): string | undefined => {
71
- return extensions.getExtension('PKief.material-icon-theme')?.packageJSON
72
- .version;
73
- };
1
+ import { extensions, Memento, workspace } from 'vscode';
2
+ import { isThemeActivated } from '.';
3
+ import { ThemeStatus } from '../models/helpers/themeStatus';
4
+
5
+ /** Get configuration of vs code. */
6
+ export const getConfig = (section?: string) => {
7
+ return workspace.getConfiguration(section);
8
+ };
9
+
10
+ export const versionKey = 'material-icon-theme.version';
11
+
12
+ /**
13
+ * Check the current status of the theme
14
+ * @param state Global state of context (Memento API)
15
+ */
16
+ export const checkThemeStatus = async (
17
+ state: Memento
18
+ ): Promise<ThemeStatus> => {
19
+ try {
20
+ // get the version from the state
21
+ const stateVersion = state.get(versionKey);
22
+ const packageVersion = getCurrentExtensionVersion();
23
+
24
+ // check if the theme was used before
25
+ if (stateVersion === undefined || typeof stateVersion !== 'string') {
26
+ await updateExtensionVersionInMemento(state);
27
+ return themeIsAlreadyActivated()
28
+ ? ThemeStatus.updated
29
+ : ThemeStatus.neverUsedBefore;
30
+ }
31
+ // compare the version in the state with the package version
32
+ else if (packageVersion && isGreaterVersion(packageVersion, stateVersion)) {
33
+ await updateExtensionVersionInMemento(state);
34
+ return ThemeStatus.updated;
35
+ } else {
36
+ return ThemeStatus.current;
37
+ }
38
+ } catch (error) {
39
+ console.error(error);
40
+ return ThemeStatus.current;
41
+ }
42
+ };
43
+
44
+ /**
45
+ * Compares two version numbers (e.g. 1.0.0 with 1.0.1)
46
+ * @param a version b
47
+ * @param b version a
48
+ * @returns true if version `a` is greater than version `b`
49
+ */
50
+ const isGreaterVersion = (a: string, b: string): boolean => {
51
+ return (
52
+ a.localeCompare(b, undefined, { numeric: true, sensitivity: 'base' }) === 1
53
+ );
54
+ };
55
+
56
+ /** Check if the theme was used before */
57
+ const themeIsAlreadyActivated = () => {
58
+ return isThemeActivated() || isThemeActivated(true);
59
+ };
60
+
61
+ /** Update the version number to the current version in the memento. */
62
+ const updateExtensionVersionInMemento = (state: Memento) => {
63
+ const currentVersion = getCurrentExtensionVersion();
64
+ if (currentVersion) {
65
+ return state.update(versionKey, currentVersion);
66
+ }
67
+ };
68
+
69
+ /** Get the current version of the extension */
70
+ const getCurrentExtensionVersion = (): string | undefined => {
71
+ return extensions.getExtension('PKief.material-icon-theme')?.packageJSON
72
+ .version;
73
+ };
package/src/i18n/index.ts CHANGED
@@ -1,78 +1,78 @@
1
- import * as vscode from 'vscode';
2
- import { getObjectPropertyValue } from '../helpers/objects';
3
- import { Translation } from '../models';
4
-
5
- // Get current language of the vs code workspace
6
- export const getCurrentLanguage = (): string => vscode.env.language;
7
-
8
- let currentTranslation: Translation;
9
- let fallbackTranslation: Translation;
10
-
11
- const placeholder = '%';
12
-
13
- /** Initialize the translations */
14
- export const initTranslations = async () => {
15
- try {
16
- currentTranslation = await loadTranslation(getCurrentLanguage());
17
- fallbackTranslation = await loadTranslation('en');
18
- } catch (error) {
19
- console.error(error);
20
- }
21
- };
22
-
23
- /** Load the required translation */
24
- const loadTranslation = async (language: string) => {
25
- try {
26
- return await getTranslationObject(language);
27
- } catch (error) {
28
- return await getTranslationObject('en');
29
- }
30
- };
31
-
32
- /** Get the translation object of the separated translation files */
33
- const getTranslationObject = async (language: string): Promise<Translation> => {
34
- const lang = await import(/* webpackMode: "eager" */ `./lang-${language}`);
35
- return lang.translation as Translation;
36
- };
37
-
38
- /**
39
- * We look up the matching translation in the translation files.
40
- * If we cannot find a matching key in the file we use the fallback.
41
- * With optional parameters you can configure both the translations
42
- * and the fallback (required for testing purposes).
43
- * */
44
- export const getTranslationValue = (
45
- key: string,
46
- translations = currentTranslation,
47
- fallback = fallbackTranslation
48
- ): string | undefined => {
49
- return (
50
- getObjectPropertyValue(translations, key) ??
51
- getObjectPropertyValue(fallback, key)
52
- );
53
- };
54
-
55
- /**
56
- * The instant method is required for the translate pipe.
57
- * It helps to translate a word instantly.
58
- */
59
- export const translate = (key: string, ...variables: string[]): string => {
60
- const translation = getTranslationValue(key);
61
-
62
- if (variables.length === 0) return translation ?? key;
63
- return replace(translation, ...variables);
64
- };
65
-
66
- /**
67
- * The replace function will replace the current placeholder with the
68
- * data parameter from the translation. You can give it one or more optional
69
- * parameters ('variables').
70
- */
71
- export const replace = (value: string = '', ...variables: string[]) => {
72
- let translation: string = value;
73
- variables.forEach((variable, i) => {
74
- translation = translation.replace(`${placeholder}${i}`, variable);
75
- });
76
-
77
- return translation;
78
- };
1
+ import * as vscode from 'vscode';
2
+ import { getObjectPropertyValue } from '../helpers/objects';
3
+ import { Translation } from '../models';
4
+
5
+ // Get current language of the vs code workspace
6
+ export const getCurrentLanguage = (): string => vscode.env.language;
7
+
8
+ let currentTranslation: Translation;
9
+ let fallbackTranslation: Translation;
10
+
11
+ const placeholder = '%';
12
+
13
+ /** Initialize the translations */
14
+ export const initTranslations = async () => {
15
+ try {
16
+ currentTranslation = await loadTranslation(getCurrentLanguage());
17
+ fallbackTranslation = await loadTranslation('en');
18
+ } catch (error) {
19
+ console.error(error);
20
+ }
21
+ };
22
+
23
+ /** Load the required translation */
24
+ const loadTranslation = async (language: string) => {
25
+ try {
26
+ return await getTranslationObject(language);
27
+ } catch (error) {
28
+ return await getTranslationObject('en');
29
+ }
30
+ };
31
+
32
+ /** Get the translation object of the separated translation files */
33
+ const getTranslationObject = async (language: string): Promise<Translation> => {
34
+ const lang = await import(/* webpackMode: "eager" */ `./lang-${language}`);
35
+ return lang.translation as Translation;
36
+ };
37
+
38
+ /**
39
+ * We look up the matching translation in the translation files.
40
+ * If we cannot find a matching key in the file we use the fallback.
41
+ * With optional parameters you can configure both the translations
42
+ * and the fallback (required for testing purposes).
43
+ * */
44
+ export const getTranslationValue = (
45
+ key: string,
46
+ translations = currentTranslation,
47
+ fallback = fallbackTranslation
48
+ ): string | undefined => {
49
+ return (
50
+ getObjectPropertyValue(translations, key) ??
51
+ getObjectPropertyValue(fallback, key)
52
+ );
53
+ };
54
+
55
+ /**
56
+ * The instant method is required for the translate pipe.
57
+ * It helps to translate a word instantly.
58
+ */
59
+ export const translate = (key: string, ...variables: string[]): string => {
60
+ const translation = getTranslationValue(key);
61
+
62
+ if (variables.length === 0) return translation ?? key;
63
+ return replace(translation, ...variables);
64
+ };
65
+
66
+ /**
67
+ * The replace function will replace the current placeholder with the
68
+ * data parameter from the translation. You can give it one or more optional
69
+ * parameters ('variables').
70
+ */
71
+ export const replace = (value: string = '', ...variables: string[]) => {
72
+ let translation: string = value;
73
+ variables.forEach((variable, i) => {
74
+ translation = translation.replace(`${placeholder}${i}`, variable);
75
+ });
76
+
77
+ return translation;
78
+ };
@@ -1,54 +1,54 @@
1
- import { Translation } from '../models';
2
-
3
- export const translation: Translation = {
4
- themeInstalled: 'Material Icon Theme wurde installiert.',
5
- howToActivate: 'Wie Icons aktivieren?',
6
- activate: 'Aktivieren',
7
- activated: 'Material Icon Theme ist jetzt aktiviert.',
8
- neverShowAgain: 'Nicht mehr zeigen',
9
- themeUpdated: 'Das Material Icon Theme wurde aktualisiert.',
10
- readChangelog: 'Änderungsprotokoll lesen',
11
- iconPacks: {
12
- selectPack: 'Icon Pack auswählen',
13
- description: "Das '%0' Icon Pack auswählen",
14
- disabled: 'Icon Packs deaktivieren',
15
- },
16
- folders: {
17
- toggleIcons: 'Wähle ein Ordner Design',
18
- color: 'Wähle eine Ordner Farbe',
19
- hexCode: 'Gebe einen HEX Farbcode ein',
20
- wrongHexCode: 'Ungültiger HEX Farbcode',
21
- disabled: 'Keine Ordner Icons',
22
- theme: {
23
- description: "Wähle das '%0' Design",
24
- },
25
- },
26
- opacity: {
27
- inputPlaceholder: 'Wert der Deckkraft (zwischen 0 und 1)',
28
- wrongValue: 'Der Wert muss zwischen 0 und 1 liegen!',
29
- },
30
- toggleSwitch: {
31
- on: 'EIN',
32
- off: 'AUS',
33
- },
34
- explorerArrows: {
35
- toggle: 'Pfeile im Explorer anpassen',
36
- enable: 'Explorer Pfeile anzeigen',
37
- disable: 'Explorer Pfeile ausblenden',
38
- },
39
- grayscale: {
40
- toggle: 'Schaltet graustufige Icons um',
41
- enable: 'Aktiviert graustufige Icons',
42
- disable: 'Deaktiviert graustufige Icons',
43
- },
44
- saturation: {
45
- inputPlaceholder: 'Wert der Sättigung (zwischen 0 und 1)',
46
- wrongValue: 'Der Wert muss zwischen 0 und 1 liegen!',
47
- },
48
- confirmReload:
49
- 'VS Code muss neu gestartet werden, um die Änderungen an den Icons zu aktivieren.',
50
- reload: 'Neu starten',
51
- outdatedVersion:
52
- 'VS Code muss aktualisiert werden, um diesen Befehl auszuführen.',
53
- updateVSCode: 'VS Code aktualisieren',
54
- };
1
+ import { Translation } from '../models';
2
+
3
+ export const translation: Translation = {
4
+ themeInstalled: 'Material Icon Theme wurde installiert.',
5
+ howToActivate: 'Wie Icons aktivieren?',
6
+ activate: 'Aktivieren',
7
+ activated: 'Material Icon Theme ist jetzt aktiviert.',
8
+ neverShowAgain: 'Nicht mehr zeigen',
9
+ themeUpdated: 'Das Material Icon Theme wurde aktualisiert.',
10
+ readChangelog: 'Änderungsprotokoll lesen',
11
+ iconPacks: {
12
+ selectPack: 'Icon Pack auswählen',
13
+ description: "Das '%0' Icon Pack auswählen",
14
+ disabled: 'Icon Packs deaktivieren',
15
+ },
16
+ folders: {
17
+ toggleIcons: 'Wähle ein Ordner Design',
18
+ color: 'Wähle eine Ordner Farbe',
19
+ hexCode: 'Gebe einen HEX Farbcode ein',
20
+ wrongHexCode: 'Ungültiger HEX Farbcode',
21
+ disabled: 'Keine Ordner Icons',
22
+ theme: {
23
+ description: "Wähle das '%0' Design",
24
+ },
25
+ },
26
+ opacity: {
27
+ inputPlaceholder: 'Wert der Deckkraft (zwischen 0 und 1)',
28
+ wrongValue: 'Der Wert muss zwischen 0 und 1 liegen!',
29
+ },
30
+ toggleSwitch: {
31
+ on: 'EIN',
32
+ off: 'AUS',
33
+ },
34
+ explorerArrows: {
35
+ toggle: 'Pfeile im Explorer anpassen',
36
+ enable: 'Explorer Pfeile anzeigen',
37
+ disable: 'Explorer Pfeile ausblenden',
38
+ },
39
+ grayscale: {
40
+ toggle: 'Schaltet graustufige Icons um',
41
+ enable: 'Aktiviert graustufige Icons',
42
+ disable: 'Deaktiviert graustufige Icons',
43
+ },
44
+ saturation: {
45
+ inputPlaceholder: 'Wert der Sättigung (zwischen 0 und 1)',
46
+ wrongValue: 'Der Wert muss zwischen 0 und 1 liegen!',
47
+ },
48
+ confirmReload:
49
+ 'VS Code muss neu gestartet werden, um die Änderungen an den Icons zu aktivieren.',
50
+ reload: 'Neu starten',
51
+ outdatedVersion:
52
+ 'VS Code muss aktualisiert werden, um diesen Befehl auszuführen.',
53
+ updateVSCode: 'VS Code aktualisieren',
54
+ };
@@ -1,53 +1,53 @@
1
- import { Translation } from '../models';
2
-
3
- export const translation: Translation = {
4
- themeInstalled: 'Material Icon Theme has been installed.',
5
- howToActivate: 'How to activate icons',
6
- activate: 'Activate',
7
- activated: 'Material Icon Theme is active.',
8
- neverShowAgain: 'Never show again',
9
- themeUpdated: 'Material Icon Theme has been updated.',
10
- readChangelog: 'Read changelog',
11
- iconPacks: {
12
- selectPack: 'Select an icon pack',
13
- description: "Select the '%0' icon pack",
14
- disabled: 'Disable icon packs',
15
- },
16
- folders: {
17
- toggleIcons: 'Pick a folder theme',
18
- color: 'Choose a folder color',
19
- hexCode: 'Insert a HEX color code',
20
- wrongHexCode: 'Invalid HEX color code!',
21
- disabled: 'No folder icons',
22
- theme: {
23
- description: "Select the '%0' folder theme",
24
- },
25
- },
26
- opacity: {
27
- inputPlaceholder: 'Opacity value (between 0 and 1)',
28
- wrongValue: 'The value must be between 0 and 1!',
29
- },
30
- toggleSwitch: {
31
- on: 'ON',
32
- off: 'OFF',
33
- },
34
- explorerArrows: {
35
- toggle: 'Toggle folder arrows',
36
- enable: 'Show folder arrows',
37
- disable: 'Hide folder arrows',
38
- },
39
- confirmReload:
40
- 'You have to restart VS Code to activate the changes to the icons.',
41
- reload: 'Restart',
42
- outdatedVersion: 'You have to update VS Code to use this command.',
43
- updateVSCode: 'Update VS Code',
44
- grayscale: {
45
- toggle: 'Toggle grayscale icons',
46
- enable: 'Enable grayscale icons',
47
- disable: 'Disable grayscale icons',
48
- },
49
- saturation: {
50
- inputPlaceholder: 'Saturation value (between 0 and 1)',
51
- wrongValue: 'The value must be between 0 and 1!',
52
- },
53
- };
1
+ import { Translation } from '../models';
2
+
3
+ export const translation: Translation = {
4
+ themeInstalled: 'Material Icon Theme has been installed.',
5
+ howToActivate: 'How to activate icons',
6
+ activate: 'Activate',
7
+ activated: 'Material Icon Theme is active.',
8
+ neverShowAgain: 'Never show again',
9
+ themeUpdated: 'Material Icon Theme has been updated.',
10
+ readChangelog: 'Read changelog',
11
+ iconPacks: {
12
+ selectPack: 'Select an icon pack',
13
+ description: "Select the '%0' icon pack",
14
+ disabled: 'Disable icon packs',
15
+ },
16
+ folders: {
17
+ toggleIcons: 'Pick a folder theme',
18
+ color: 'Choose a folder color',
19
+ hexCode: 'Insert a HEX color code',
20
+ wrongHexCode: 'Invalid HEX color code!',
21
+ disabled: 'No folder icons',
22
+ theme: {
23
+ description: "Select the '%0' folder theme",
24
+ },
25
+ },
26
+ opacity: {
27
+ inputPlaceholder: 'Opacity value (between 0 and 1)',
28
+ wrongValue: 'The value must be between 0 and 1!',
29
+ },
30
+ toggleSwitch: {
31
+ on: 'ON',
32
+ off: 'OFF',
33
+ },
34
+ explorerArrows: {
35
+ toggle: 'Toggle folder arrows',
36
+ enable: 'Show folder arrows',
37
+ disable: 'Hide folder arrows',
38
+ },
39
+ confirmReload:
40
+ 'You have to restart VS Code to activate the changes to the icons.',
41
+ reload: 'Restart',
42
+ outdatedVersion: 'You have to update VS Code to use this command.',
43
+ updateVSCode: 'Update VS Code',
44
+ grayscale: {
45
+ toggle: 'Toggle grayscale icons',
46
+ enable: 'Enable grayscale icons',
47
+ disable: 'Disable grayscale icons',
48
+ },
49
+ saturation: {
50
+ inputPlaceholder: 'Saturation value (between 0 and 1)',
51
+ wrongValue: 'The value must be between 0 and 1!',
52
+ },
53
+ };