material-icon-theme 4.18.0 → 4.18.1

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 (202) 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 +1179 -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-java-open.svg +2 -2
  40. package/icons/folder-java.svg +2 -2
  41. package/icons/folder-next-open.svg +2 -2
  42. package/icons/folder-next.svg +2 -2
  43. package/icons/folder-nuxt-open.svg +2 -2
  44. package/icons/folder-nuxt.svg +2 -2
  45. package/icons/folder-queue-open.svg +2 -2
  46. package/icons/folder-queue.svg +2 -2
  47. package/icons/folder-resolver-open.svg +2 -2
  48. package/icons/folder-resolver.svg +2 -2
  49. package/icons/folder-serverless-open.svg +5 -5
  50. package/icons/folder-serverless.svg +5 -5
  51. package/icons/folder-shader-open.svg +7 -7
  52. package/icons/folder-shader.svg +6 -6
  53. package/icons/folder-target-open.svg +2 -2
  54. package/icons/folder-target.svg +2 -2
  55. package/icons/folder-unity-open.svg +2 -2
  56. package/icons/folder-unity.svg +2 -2
  57. package/icons/folder-vercel-open.svg +4 -4
  58. package/icons/folder-vercel.svg +4 -4
  59. package/icons/folder-verdaccio-open.svg +8 -8
  60. package/icons/folder-verdaccio.svg +8 -8
  61. package/icons/gleam.svg +4 -4
  62. package/icons/gridsome.svg +4 -4
  63. package/icons/hardhat.svg +3 -3
  64. package/icons/lighthouse.svg +2 -2
  65. package/icons/ndst.svg +7 -7
  66. package/icons/next.svg +3 -3
  67. package/icons/next_light.svg +2 -2
  68. package/icons/nuxt.svg +5 -5
  69. package/icons/odin.svg +6 -6
  70. package/icons/otne.svg +16 -16
  71. package/icons/parcel.svg +4 -4
  72. package/icons/playwright.svg +7 -7
  73. package/icons/plop.svg +4 -4
  74. package/icons/pnpm.svg +9 -9
  75. package/icons/pnpm_light.svg +7 -7
  76. package/icons/poetry.svg +1 -1
  77. package/icons/processing.svg +10 -10
  78. package/icons/remix.svg +4 -4
  79. package/icons/remix_light.svg +4 -4
  80. package/icons/rescript-interface.svg +5 -5
  81. package/icons/rome.svg +5 -5
  82. package/icons/serverless.svg +4 -4
  83. package/icons/shader.svg +4 -4
  84. package/icons/siyuan.svg +9 -9
  85. package/icons/steadybit.svg +1 -1
  86. package/icons/svgr.svg +4 -4
  87. package/icons/tauri.svg +9 -9
  88. package/icons/template.svg +4 -4
  89. package/icons/tobi.svg +4 -4
  90. package/icons/tobimake.svg +14 -14
  91. package/icons/turborepo.svg +12 -12
  92. package/icons/turborepo_light.svg +12 -12
  93. package/icons/verdaccio.svg +5 -5
  94. package/images/contributors.png +0 -0
  95. package/images/fileIcons.png +0 -0
  96. package/logo.svg +21 -21
  97. package/material-colors.yml +257 -257
  98. package/package.json +267 -264
  99. package/package.nls.de.json +35 -35
  100. package/package.nls.es.json +32 -32
  101. package/package.nls.fr.json +32 -32
  102. package/package.nls.ja.json +35 -35
  103. package/package.nls.json +35 -35
  104. package/package.nls.nl.json +35 -35
  105. package/package.nls.pl.json +35 -35
  106. package/package.nls.pt-BR.json +32 -32
  107. package/package.nls.pt-PT.json +32 -32
  108. package/package.nls.ru.json +32 -32
  109. package/package.nls.zh-CN.json +32 -32
  110. package/package.nls.zh-TW.json +32 -32
  111. package/src/commands/activate.ts +26 -26
  112. package/src/commands/explorerArrows.ts +55 -55
  113. package/src/commands/folderColor.ts +96 -96
  114. package/src/commands/folders.ts +55 -55
  115. package/src/commands/grayscale.ts +55 -55
  116. package/src/commands/iconPacks.ts +68 -68
  117. package/src/commands/index.ts +30 -30
  118. package/src/commands/opacity.ts +46 -46
  119. package/src/commands/restoreConfig.ts +14 -14
  120. package/src/commands/saturation.ts +46 -46
  121. package/src/extension.ts +42 -42
  122. package/src/helpers/changeDetection.ts +105 -73
  123. package/src/helpers/customIcons.ts +8 -8
  124. package/src/helpers/fileConfig.ts +37 -37
  125. package/src/helpers/index.ts +100 -100
  126. package/src/helpers/objects.ts +58 -58
  127. package/src/helpers/types.ts +7 -7
  128. package/src/helpers/versioning.ts +73 -73
  129. package/src/i18n/index.ts +78 -78
  130. package/src/i18n/lang-de.ts +54 -54
  131. package/src/i18n/lang-en.ts +53 -53
  132. package/src/i18n/lang-es.ts +53 -53
  133. package/src/i18n/lang-fr.ts +53 -53
  134. package/src/i18n/lang-ja.ts +54 -54
  135. package/src/i18n/lang-nl.ts +54 -54
  136. package/src/i18n/lang-pl.ts +52 -52
  137. package/src/i18n/lang-pt-br.ts +53 -53
  138. package/src/i18n/lang-pt-pt.ts +53 -53
  139. package/src/i18n/lang-ru.ts +52 -52
  140. package/src/i18n/lang-uk.ts +54 -54
  141. package/src/i18n/lang-zh-cn.ts +52 -52
  142. package/src/i18n/lang-zh-tw.ts +52 -52
  143. package/src/icons/fileIcons.ts +2060 -2046
  144. package/src/icons/folderIcons.ts +773 -773
  145. package/src/icons/generator/constants.ts +29 -29
  146. package/src/icons/generator/fileGenerator.ts +216 -216
  147. package/src/icons/generator/folderGenerator.ts +340 -340
  148. package/src/icons/generator/iconOpacity.ts +111 -111
  149. package/src/icons/generator/iconSaturation.ts +140 -140
  150. package/src/icons/generator/index.ts +7 -7
  151. package/src/icons/generator/jsonGenerator.ts +187 -187
  152. package/src/icons/generator/languageGenerator.ts +127 -127
  153. package/src/icons/index.ts +4 -4
  154. package/src/icons/languageIcons.ts +136 -136
  155. package/src/messages/outdated.ts +33 -33
  156. package/src/messages/reload.ts +32 -32
  157. package/src/messages/start.ts +12 -12
  158. package/src/messages/update.ts +48 -48
  159. package/src/messages/welcome.ts +47 -47
  160. package/src/models/helpers/index.ts +1 -1
  161. package/src/models/helpers/themeStatus.ts +5 -5
  162. package/src/models/i18n/index.ts +1 -1
  163. package/src/models/i18n/translation.ts +50 -50
  164. package/src/models/iconConfiguration.ts +37 -37
  165. package/src/models/icons/defaultIcon.ts +16 -16
  166. package/src/models/icons/files/fileIcon.ts +49 -49
  167. package/src/models/icons/files/fileTypes.ts +14 -14
  168. package/src/models/icons/files/index.ts +2 -2
  169. package/src/models/icons/folders/folderIcon.ts +34 -34
  170. package/src/models/icons/folders/folderTheme.ts +23 -23
  171. package/src/models/icons/folders/index.ts +2 -2
  172. package/src/models/icons/iconJsonOptions.ts +23 -23
  173. package/src/models/icons/iconPack.ts +12 -12
  174. package/src/models/icons/index.ts +6 -6
  175. package/src/models/icons/languages/index.ts +1 -1
  176. package/src/models/icons/languages/languageIdentifier.ts +26 -26
  177. package/src/models/index.ts +4 -4
  178. package/src/models/scripts/contributors/contributor.ts +22 -22
  179. package/src/models/scripts/contributors/contributorsConfig.ts +10 -10
  180. package/src/scripts/contributors/contributors.css +24 -24
  181. package/src/scripts/contributors/index.ts +138 -138
  182. package/src/scripts/helpers/painter.ts +5 -5
  183. package/src/scripts/helpers/screenshots.ts +32 -32
  184. package/src/scripts/helpers/similarity.ts +47 -47
  185. package/src/scripts/helpers/titleCase.ts +7 -7
  186. package/src/scripts/icons/checks/checkIconAvailability.ts +215 -215
  187. package/src/scripts/icons/checks/checkIconConflicts.ts +154 -154
  188. package/src/scripts/icons/checks/checkIconUsage.ts +141 -141
  189. package/src/scripts/icons/checks/index.ts +7 -7
  190. package/src/scripts/icons/generateJson.ts +11 -11
  191. package/src/scripts/preview/index.ts +40 -40
  192. package/src/scripts/preview/preview.ts +165 -165
  193. package/src/scripts/preview/style.css +48 -48
  194. package/src/test/runTest.ts +26 -26
  195. package/src/test/spec/i18n/i18n.spec.ts +61 -61
  196. package/src/test/spec/icons/fileIcons.spec.ts +250 -250
  197. package/src/test/spec/icons/folderIcons.spec.ts +418 -418
  198. package/src/test/spec/icons/languageIcons.spec.ts +184 -184
  199. package/src/test/spec/index.ts +36 -36
  200. package/src/web/extension.ts +10 -10
  201. package/svgo.config.js +11 -11
  202. 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
+ };