diff --git a/apps/reader/locales/de-DE.ts b/apps/reader/locales/de-DE.ts new file mode 100644 index 00000000..94dbd703 --- /dev/null +++ b/apps/reader/locales/de-DE.ts @@ -0,0 +1,77 @@ +export default { + 'home.title': 'Startseite', + 'home.share': 'Teilen', + 'home.download': 'Herunterladen', + 'home.download_sample_book': 'Beispielbuch herunterladen', + 'home.select': 'Auswählen', + 'home.cancel': 'Abbrechen', + 'home.select_all': 'Alle auswählen', + 'home.deselect_all': 'Alle abwählen', + 'home.export': 'Exportieren', + 'home.import': 'Importieren', + 'home.upload': 'Hochladen', + 'home.delete': 'Löschen', + + 'toc.title': 'Inhaltsverzeichnis', + 'toc.library': 'Bibliothek', + + 'search.title': 'Suchen', + 'search.files.result': '{n} Ergebnisse in {m} Abschnitten', + + 'annotation.title': 'Anmerkung', + 'annotation.definitions': 'Definitionen', + 'annotation.annotations': 'Anmerkungen', + 'annotation.copy_as_markdown': 'Als Markdown kopieren', + + 'image.title': 'Bild', + + 'timeline.title': 'Zeitleiste', + + 'typography.title': 'Typografie', + 'typography.scope.book': 'Buch', + 'typography.scope.global': 'Global', + 'typography.page_view': 'Seitenansicht', + 'typography.page_view.single_page': 'Einzelseite', + 'typography.page_view.double_page': 'Doppelseite', + 'typography.font_family': 'Schriftart', + 'typography.font_size': 'Schriftgröße', + 'typography.font_weight': 'Schriftstärke', + 'typography.line_height': 'Zeilenhöhe', + 'typography.zoom': 'Zoom', + + 'theme.title': 'Design', + 'theme.source_color': 'Quellfarbe', + 'theme.background_color': 'Hintergrundfarbe', + + 'settings.title': 'Einstellungen', + 'settings.language': 'Sprache', + 'settings.color_scheme': 'Farbschema', + 'settings.color_scheme.system': 'System', + 'settings.color_scheme.light': 'Hell', + 'settings.color_scheme.dark': 'Dunkel', + 'settings.synchronization.title': 'Synchronisation', + 'settings.synchronization.authorize': 'Autorisieren', + 'settings.synchronization.unauthorize': 'Deautorisieren', + 'settings.cache': 'Cache', + 'settings.cache.clear': 'Leeren', + 'settings.text_selection_menu': 'Textauswahlmenü', + 'settings.text_selection_menu.enable': 'Aktivieren', + + 'menu.copy': 'Kopieren', + 'menu.search_in_book': 'Im Buch suchen', + 'menu.annotate': 'Kommentieren', + 'menu.define': 'Definieren', + 'menu.undefine': 'Definition entfernen', + 'menu.create': 'Erstellen', + 'menu.delete': 'Löschen', + 'menu.update': 'Aktualisieren', + + 'action.expand_all': 'Alle erweitern', + 'action.collapse_all': 'Alle einklappen', + 'action.close': 'Schließen', + 'action.clear': 'Leeren', + 'action.step_down': 'Schritt zurück', + 'action.step_up': 'Schritt vor', + + untitled: 'Ohne Titel', +} as const diff --git a/apps/reader/locales/index.ts b/apps/reader/locales/index.ts index 205e4ad1..9bb27c88 100644 --- a/apps/reader/locales/index.ts +++ b/apps/reader/locales/index.ts @@ -1,10 +1,20 @@ import en_US from '../locales/en-US' import ja_JP from '../locales/ja-JP' import zh_CN from '../locales/zh-CN' +import de_DE from '../locales/de-DE' + +// Locale display names +export const localeNames: Record = { + 'en-US': 'English', + 'zh-CN': '简体中文', + 'ja-JP': '日本語', + 'de-DE': 'Deutsch', +} // eslint-disable-next-line import/no-anonymous-default-export export default { 'en-US': en_US, 'zh-CN': zh_CN, 'ja-JP': ja_JP, + 'de-DE': de_DE, } as const diff --git a/apps/reader/next.config.js b/apps/reader/next.config.js index 18ebde29..b69bf4b0 100644 --- a/apps/reader/next.config.js +++ b/apps/reader/next.config.js @@ -40,7 +40,7 @@ const config = { return config }, i18n: { - locales: ['en-US', 'zh-CN', 'ja-JP'], + locales: ['en-US', 'zh-CN', 'ja-JP', 'de-DE'], defaultLocale: 'en-US', }, ...(IS_DOCKER && { diff --git a/apps/reader/src/components/pages/settings.tsx b/apps/reader/src/components/pages/settings.tsx index ae9227d0..ea6d2428 100644 --- a/apps/reader/src/components/pages/settings.tsx +++ b/apps/reader/src/components/pages/settings.tsx @@ -9,6 +9,7 @@ import { useForceRender, useTranslation, } from '@flow/reader/hooks' +import { localeNames } from '@flow/reader/locales' import { useSettings } from '@flow/reader/state' import { dbx, mapToToken, OAUTH_SUCCESS_MESSAGE } from '@flow/reader/sync' @@ -18,7 +19,7 @@ import { Page } from '../Page' export const Settings: React.FC = () => { const { scheme, setScheme } = useColorScheme() - const { asPath, push, locale } = useRouter() + const { asPath, push, locale, locales } = useRouter() const [settings, setSettings] = useSettings() const t = useTranslation('settings') @@ -32,9 +33,11 @@ export const Settings: React.FC = () => { push(asPath, undefined, { locale: e.target.value }) }} > - - - + {locales?.map((loc) => ( + + ))}