diff --git a/web/src/i18n.ts b/web/src/i18n.ts new file mode 100644 index 0000000..70ae81f --- /dev/null +++ b/web/src/i18n.ts @@ -0,0 +1,9 @@ +import { init, register } from 'svelte-i18n'; + +register('en', () => import('./locales/en.json')); +register('zh', () => import('./locales/zh.json')); + +init({ + fallbackLocale: 'en', + initialLocale: 'zh', // 或者根据用户的浏览器设置动态选择 +}); \ No newline at end of file diff --git a/web/src/lib/LanguageSwitcher.svelte b/web/src/lib/LanguageSwitcher.svelte new file mode 100644 index 0000000..e7814a0 --- /dev/null +++ b/web/src/lib/LanguageSwitcher.svelte @@ -0,0 +1,36 @@ + + + \ No newline at end of file diff --git a/web/src/lib/components/LibraryFilter.svelte b/web/src/lib/components/LibraryFilter.svelte index fea7c9f..6915679 100644 --- a/web/src/lib/components/LibraryFilter.svelte +++ b/web/src/lib/components/LibraryFilter.svelte @@ -1,5 +1,6 @@ diff --git a/web/src/routes/+page.svelte b/web/src/routes/+page.svelte index cfa14e3..b937e98 100644 --- a/web/src/routes/+page.svelte +++ b/web/src/routes/+page.svelte @@ -10,6 +10,8 @@ import { onMount } from 'svelte'; import { translateAppName } from '$lib/utils'; import LucideIcon from '$lib/components/LucideIcon.svelte'; + import LanguageSwitcher from '$lib/LanguageSwitcher.svelte'; + import { _ } from 'svelte-i18n'; let searchString = ''; /** @@ -64,7 +66,6 @@ onMount(() => { const handleScroll = () => { - console.log(window.scrollY) if (window.scrollY > 100) { isScrolled = true; } else if (isScrolled && window.scrollY < 20) { @@ -296,7 +297,7 @@ type="text" class={inputClasses} bind:value={searchString} - placeholder="Input keyword to search or press Enter to show latest records" + placeholder={$_('searchPlaceholder')} on:keydown={handleEnterPress} autofocus /> @@ -331,13 +332,15 @@
{#if isLoading} -

Loading...

+

{$_('loading')}

{:else if searchResult && searchResult.hits.length > 0} {#if searchResult['search_time_ms'] > 0}

- ✨ {searchResult['found'].toLocaleString()} results found - Searched {searchResult[ - 'out_of' - ].toLocaleString()} recipes in {searchResult['search_time_ms']}ms. + {$_('searchSummary', { values: { + found: searchResult['found'].toLocaleString(), + outOf: searchResult['out_of'].toLocaleString(), + time: searchResult['search_time_ms'] + }})}

{/if}
@@ -377,7 +380,7 @@ {/each}
{:else if searchString} -

No results found.

+

{$_('noResults')}

{:else}

{/if} @@ -407,11 +410,13 @@