diff --git a/src/app/Config.ts b/src/app/Config.ts index 6797ab0c..f1e92638 100644 --- a/src/app/Config.ts +++ b/src/app/Config.ts @@ -4,6 +4,7 @@ import type { VersionId } from './services/Schemas.js' export interface ConfigLanguage { code: string, name: string, + mc: string, schemas?: boolean, } diff --git a/src/app/components/ItemTooltip.tsx b/src/app/components/ItemTooltip.tsx index 6ff1455a..36a48575 100644 --- a/src/app/components/ItemTooltip.tsx +++ b/src/app/components/ItemTooltip.tsx @@ -1,10 +1,11 @@ import type { ItemStack } from 'deepslate/core' import { AttributeModifierOperation, Enchantment, Identifier, MobEffectInstance, Potion } from 'deepslate/core' import { NbtList, NbtType } from 'deepslate/nbt' -import { message } from '../Utils.js' +import { useLocale } from '../contexts/Locale.jsx' import { useVersion } from '../contexts/Version.jsx' import { useAsync } from '../hooks/useAsync.js' import { getLanguage, getTranslation } from '../services/Resources.js' +import { message } from '../Utils.js' import { TextComponent } from './TextComponent.jsx' interface Props { @@ -13,8 +14,9 @@ interface Props { } export function ItemTooltip({ item, advanced }: Props) { const { version } = useVersion() + const { lang } = useLocale() - const { value: language } = useAsync(() => getLanguage(version), [version]) + const { value: language } = useAsync(() => getLanguage(version, lang), [version, lang]) const isPotion = item.is('potion') || item.is('splash_potion') || item.is('lingering_potion') let displayName = item.tag.getCompound('display').getString('Name') diff --git a/src/app/components/TextComponent.tsx b/src/app/components/TextComponent.tsx index 33665c26..85fbb48f 100644 --- a/src/app/components/TextComponent.tsx +++ b/src/app/components/TextComponent.tsx @@ -1,4 +1,5 @@ import { useMemo } from 'preact/hooks' +import { useLocale } from '../contexts/Locale.jsx' import { useVersion } from '../contexts/Version.jsx' import { useAsync } from '../hooks/useAsync.js' import { getLanguage, replaceTranslation } from '../services/Resources.js' @@ -25,6 +26,7 @@ interface Props { } export function TextComponent({ component, base = { color: 'white' }, shadow = true }: Props) { const { version } = useVersion() + const { lang } = useLocale() const state = JSON.stringify(component) const parts = useMemo(() => { @@ -33,7 +35,7 @@ export function TextComponent({ component, base = { color: 'white' }, shadow = t return parts }, [state, base]) - const { value: language } = useAsync(() => getLanguage(version), [version]) + const { value: language } = useAsync(() => getLanguage(version, lang), [version, lang]) return
{shadow &&
diff --git a/src/app/services/Resources.ts b/src/app/services/Resources.ts index a94ef67a..dc11db4e 100644 --- a/src/app/services/Resources.ts +++ b/src/app/services/Resources.ts @@ -1,5 +1,6 @@ import type { BlockDefinitionProvider, BlockFlagsProvider, BlockModelProvider, BlockPropertiesProvider, ItemStack, TextureAtlasProvider, UV } from 'deepslate/render' import { BlockDefinition, BlockModel, Identifier, ItemRenderer, TextureAtlas, upperPowerOfTwo } from 'deepslate/render' +import config from '../Config.js' import { message } from '../Utils.js' import { fetchLanguage, fetchResources } from './DataFetcher.js' import type { VersionId } from './Schemas.js' @@ -167,20 +168,22 @@ export type Language = Record const Languages: Record> = {} -export async function getLanguage(version: VersionId) { - if (!Languages[version]) { - Languages[version] = (async () => { +export async function getLanguage(version: VersionId, lang: string = 'en') { + const mcLang = config.languages.find(l => l.code === lang)?.mc ?? 'en_us' + const cacheKey = `${version}_${mcLang}` + if (!Languages[cacheKey]) { + Languages[cacheKey] = (async () => { try { - Languages[version] = await fetchLanguage(version) - return Languages[version] + Languages[cacheKey] = await fetchLanguage(version, mcLang) + return Languages[cacheKey] } catch (e) { console.error('Error: ', e) - throw new Error(`Cannot get language for version ${version}: ${message(e)}`) + throw new Error(`Cannot get language '${mcLang}' for version ${version}: ${message(e)}`) } })() - return Languages[version] + return Languages[cacheKey] } - return Languages[version] + return Languages[cacheKey] } export function getTranslation(lang: Language, key: string, params?: string[]) { diff --git a/src/config.json b/src/config.json index 77e1ebcc..4f7ea010 100644 --- a/src/config.json +++ b/src/config.json @@ -2,61 +2,75 @@ "languages": [ { "code": "de", - "name": "Deutsch" + "name": "Deutsch", + "mc": "de_de" }, { "code": "en", - "name": "English" + "name": "English", + "mc": "en_us" }, { "code": "es", - "name": "Español" + "name": "Español", + "mc": "es_es" }, { "code": "fr", - "name": "Français" + "name": "Français", + "mc": "fr_fr" }, { "code": "it", - "name": "Italiano" + "name": "Italiano", + "mc": "it_it" }, { "code": "ja", - "name": "日本語" + "name": "日本語", + "mc": "ja_jp" }, { "code": "ko", "name": "한국어", + "mc": "ko_kr", "schemas": false }, { "code": "pl", - "name": "Polski" + "name": "Polski", + "mc": "pl_pl" }, { "code": "pt", - "name": "Português" + "name": "Português", + "mc": "pt_pt" }, { "code": "ru", - "name": "Русский" + "name": "Русский", + "mc": "ru_ru" }, { "code": "sk", "name": "Slovenčina", + "mc": "sk_sk", "schemas": false }, { "code": "tr", - "name": "Türkçe" + "name": "Türkçe", + "mc": "tr_tr" }, { "code": "zh-cn", - "name": "简体中文" + "name": "简体中文", + "mc": "zh_cn" }, { "code": "zh-tw", - "name": "正體中文" + "name": "正體中文", + "mc": "zh_hk" } ], "versions": [ diff --git a/src/contributors.json b/src/contributors.json index f10ff835..7a0a32ea 100644 --- a/src/contributors.json +++ b/src/contributors.json @@ -152,6 +152,12 @@ "avatar": "https://avatars.githubusercontent.com/u/34157027?v=4", "url": "https://github.com/Flemmli97" }, + { + "name": "efekos", + "types": ["code", "translation"], + "avatar": "https://avatars.githubusercontent.com/u/56752400?v=4", + "url": "https://github.com/efekos" + }, { "name": "HalbFettKaese", "types": ["report", "translation"], @@ -955,11 +961,5 @@ "types": ["translation"], "avatar": "https://avatars.githubusercontent.com/u/121224522?v=4", "url": "https://github.com/notlin4" - }, - { - "name":"efekos", - "types":["translation"], - "avatar":"https://avatars.githubusercontent.com/u/56752400?v=4", - "url":"https://github.com/efekos" } ]