diff --git a/theme/src/node/locales/de.ts b/theme/src/node/locales/de.ts
new file mode 100644
index 00000000..49d10a65
--- /dev/null
+++ b/theme/src/node/locales/de.ts
@@ -0,0 +1,125 @@
+/** 德语 */
+import type { DocSearchLocaleOptions } from '@vuepress/plugin-docsearch'
+import type { SearchLocaleOptions } from '@vuepress-plume/plugin-search'
+import type { PlumeThemeLocaleData, PresetLocale } from '../../shared/index.js'
+
+export const deLocale: PlumeThemeLocaleData = {
+ selectLanguageName: 'Deutsch',
+ selectLanguageText: 'Sprache auswählen',
+
+ appearanceText: 'Erscheinungsbild',
+ lightModeSwitchTitle: 'Zu hellem Thema wechseln',
+ darkModeSwitchTitle: 'Zu dunklem Thema wechseln',
+
+ outlineLabel: 'Inhalt dieser Seite',
+ returnToTopLabel: 'Zurück nach oben',
+ editLinkText: 'Diese Seite bearbeiten',
+ contributorsText: 'Mitwirkende',
+ prevPageLabel: 'Vorherige Seite',
+ nextPageLabel: 'Nächste Seite',
+ lastUpdatedText: 'Zuletzt aktualisiert am',
+
+ changelogText: 'Änderungsprotokoll',
+ changelogOnText: 'am',
+ changelogButtonText: 'Alle Änderungen anzeigen',
+
+ copyrightText: 'Alle Rechte vorbehalten',
+ copyrightAuthorText: 'Urheberrecht liegt bei:',
+ copyrightCreationOriginalText: 'Originalartikel:',
+ copyrightCreationTranslateText: 'Übersetzt aus:',
+ copyrightCreationReprintText: 'Nachdruck von:',
+ copyrightLicenseText: 'Lizenz:',
+
+ notFound: {
+ code: '404',
+ title: 'Seite nicht gefunden',
+ quote: 'Aber wenn du deine Richtung nicht änderst und weiter suchst, könntest du schließlich dorthin gelangen, wohin du gehen willst.',
+ linkText: 'Zur Startseite',
+ },
+
+ encryptButtonText: 'Bestätigen',
+ encryptPlaceholder: 'Bitte Passwort eingeben',
+ encryptGlobalText: 'Diese Website ist nur mit Passwort zugänglich',
+ encryptPageText: 'Diese Seite ist nur mit Passwort zugänglich',
+
+ footer: {
+ message:
+ 'Unterstützt von VuePress & vuepress-theme-plume',
+ },
+}
+
+export const dePresetLocale: PresetLocale = {
+ 'home': 'Startseite',
+ 'blog': 'Blog',
+ 'tag': 'Tag',
+ 'archive': 'Archiv',
+ 'category': 'Kategorie',
+ 'archiveTotal': '{count} Beiträge',
+
+ // ------ copyright license ------
+ 'CC0': 'CC0 1.0 Universell',
+ 'CC-BY-4.0': 'Namensnennung 4.0 International',
+ 'CC-BY-NC-4.0': 'Namensnennung-Nicht kommerziell 4.0 International',
+ 'CC-BY-NC-SA-4.0': 'Namensnennung-Nicht kommerziell-Weitergabe unter gleichen Bedingungen 4.0 International',
+ 'CC-BY-NC-ND-4.0': 'Namensnennung-Nicht kommerziell-Keine Bearbeitung 4.0 International',
+ 'CC-BY-ND-4.0': 'Namensnennung-Keine Bearbeitung 4.0 International',
+ 'CC-BY-SA-4.0': 'Namensnennung-Weitergabe unter gleichen Bedingungen 4.0 International',
+}
+
+export const deDocsearchLocale: DocSearchLocaleOptions = {
+ placeholder: 'Dokumente durchsuchen',
+ translations: {
+ button: {
+ buttonText: 'Dokumente durchsuchen',
+ buttonAriaLabel: 'Dokumente durchsuchen',
+ },
+ modal: {
+ searchBox: {
+ resetButtonTitle: 'Suchkriterien löschen',
+ resetButtonAriaLabel: 'Suchkriterien löschen',
+ cancelButtonText: 'Abbrechen',
+ cancelButtonAriaLabel: 'Abbrechen',
+ },
+ startScreen: {
+ recentSearchesTitle: 'Letzte Suchen',
+ noRecentSearchesText: 'Keine letzten Suchen',
+ saveRecentSearchButtonTitle: 'Zu letzten Suchen hinzufügen',
+ removeRecentSearchButtonTitle: 'Aus letzten Suchen entfernen',
+ favoriteSearchesTitle: 'Favoriten',
+ removeFavoriteSearchButtonTitle: 'Aus Favoriten entfernen',
+ },
+ errorScreen: {
+ titleText: 'Ergebnisse konnten nicht abgerufen werden',
+ helpText: 'Möglicherweise müssen Sie Ihre Internetverbindung überprüfen.',
+ },
+ footer: {
+ selectText: 'Auswählen',
+ navigateText: 'Wechseln',
+ closeText: 'Schließen',
+ searchByText: 'Bereitgestellt von',
+ },
+ noResultsScreen: {
+ noResultsText: 'Keine relevanten Ergebnisse gefunden',
+ suggestedQueryText: 'Sie können versuchen, nach',
+ reportMissingResultsText: 'Sie glauben, dass diese Suche Ergebnisse liefern sollte?',
+ reportMissingResultsLinkText: 'Klicken Sie hier, um Feedback zu geben',
+ },
+ },
+ },
+}
+
+export const deSearchLocale: Partial = {
+ placeholder: 'Dokumente durchsuchen',
+ resetButtonTitle: 'Suche zurücksetzen',
+ backButtonTitle: 'Schließen',
+ noResultsText: 'Keine Suchergebnisse:',
+ footer: {
+ selectText: 'Auswählen',
+ selectKeyAriaLabel: 'Eingabe',
+ navigateText: 'Wechseln',
+ navigateUpKeyAriaLabel: 'Nach oben',
+ navigateDownKeyAriaLabel: 'Nach unten',
+ closeText: 'Schließen',
+ closeKeyAriaLabel: 'Beenden',
+ },
+}
diff --git a/theme/src/node/locales/fr.ts b/theme/src/node/locales/fr.ts
new file mode 100644
index 00000000..14835eb5
--- /dev/null
+++ b/theme/src/node/locales/fr.ts
@@ -0,0 +1,125 @@
+/** 法语 */
+import type { DocSearchLocaleOptions } from '@vuepress/plugin-docsearch'
+import type { SearchLocaleOptions } from '@vuepress-plume/plugin-search'
+import type { PlumeThemeLocaleData, PresetLocale } from '../../shared/index.js'
+
+export const frLocale: PlumeThemeLocaleData = {
+ selectLanguageName: 'Français',
+ selectLanguageText: 'Choisir la langue',
+
+ appearanceText: 'Apparence',
+ lightModeSwitchTitle: 'Passer au thème clair',
+ darkModeSwitchTitle: 'Passer au thème sombre',
+
+ outlineLabel: 'Contenu de cette page',
+ returnToTopLabel: 'Retour en haut',
+ editLinkText: 'Modifier cette page',
+ contributorsText: 'Contributeurs',
+ prevPageLabel: 'Page précédente',
+ nextPageLabel: 'Page suivante',
+ lastUpdatedText: 'Dernière mise à jour',
+
+ changelogText: 'Historique des changements',
+ changelogOnText: 'le',
+ changelogButtonText: 'Voir tout l\'historique des changements',
+
+ copyrightText: 'Tous droits réservés',
+ copyrightAuthorText: 'Copyright appartenant à :',
+ copyrightCreationOriginalText: 'Lien de l\'article :',
+ copyrightCreationTranslateText: 'Traduit de :',
+ copyrightCreationReprintText: 'Reproduit de :',
+ copyrightLicenseText: 'Licence :',
+
+ notFound: {
+ code: '404',
+ title: 'Page non trouvée',
+ quote: 'Mais si tu ne changes pas de direction et que tu continues à chercher, tu finiras par arriver à destination.',
+ linkText: 'Retour à l\'accueil',
+ },
+
+ encryptButtonText: 'Confirmer',
+ encryptPlaceholder: 'Veuillez entrer le mot de passe',
+ encryptGlobalText: 'Ce site n\'est accessible qu\'avec un mot de passe',
+ encryptPageText: 'Cette page n\'est accessible qu\'avec un mot de passe',
+
+ footer: {
+ message:
+ 'Propulsé par VuePress & vuepress-theme-plume',
+ },
+}
+
+export const frPresetLocale: PresetLocale = {
+ 'home': 'Accueil',
+ 'blog': 'Blog',
+ 'tag': 'Étiquette',
+ 'archive': 'Archives',
+ 'category': 'Catégorie',
+ 'archiveTotal': '{count} articles',
+
+ // ------ copyright license ------
+ 'CC0': 'CC0 1.0 Universel',
+ 'CC-BY-4.0': 'Attribution 4.0 International',
+ 'CC-BY-NC-4.0': 'Attribution-Pas d\'Utilisation Commerciale 4.0 International',
+ 'CC-BY-NC-SA-4.0': 'Attribution-Pas d\'Utilisation Commerciale-Partage dans les Mêmes Conditions 4.0 International',
+ 'CC-BY-NC-ND-4.0': 'Attribution-Pas d\'Utilisation Commerciale-Pas de Modification 4.0 International',
+ 'CC-BY-ND-4.0': 'Attribution-Pas de Modification 4.0 International',
+ 'CC-BY-SA-4.0': 'Attribution-Partage dans les Mêmes Conditions 4.0 International',
+}
+
+export const frDocsearchLocale: DocSearchLocaleOptions = {
+ placeholder: 'Rechercher dans la documentation',
+ translations: {
+ button: {
+ buttonText: 'Rechercher dans la documentation',
+ buttonAriaLabel: 'Rechercher dans la documentation',
+ },
+ modal: {
+ searchBox: {
+ resetButtonTitle: 'Effacer les critères de recherche',
+ resetButtonAriaLabel: 'Effacer les critères de recherche',
+ cancelButtonText: 'Annuler',
+ cancelButtonAriaLabel: 'Annuler',
+ },
+ startScreen: {
+ recentSearchesTitle: 'Recherches récentes',
+ noRecentSearchesText: 'Aucune recherche récente',
+ saveRecentSearchButtonTitle: 'Enregistrer dans les recherches récentes',
+ removeRecentSearchButtonTitle: 'Supprimer des recherches récentes',
+ favoriteSearchesTitle: 'Favoris',
+ removeFavoriteSearchButtonTitle: 'Supprimer des favoris',
+ },
+ errorScreen: {
+ titleText: 'Impossible d\'obtenir les résultats',
+ helpText: 'Vous devriez vérifier votre connexion Internet',
+ },
+ footer: {
+ selectText: 'sélectionner',
+ navigateText: 'naviguer',
+ closeText: 'fermer',
+ searchByText: 'Recherche par',
+ },
+ noResultsScreen: {
+ noResultsText: 'Aucun résultat trouvé',
+ suggestedQueryText: 'Vous pouvez essayer de rechercher',
+ reportMissingResultsText: 'Pensez-vous que cette recherche devrait avoir des résultats ?',
+ reportMissingResultsLinkText: 'Cliquez pour signaler',
+ },
+ },
+ },
+}
+
+export const frSearchLocale: Partial = {
+ placeholder: 'Rechercher dans la documentation',
+ resetButtonTitle: 'Réinitialiser la recherche',
+ backButtonTitle: 'Fermer',
+ noResultsText: 'Aucun résultat trouvé :',
+ footer: {
+ selectText: 'sélectionner',
+ selectKeyAriaLabel: 'Entrée',
+ navigateText: 'naviguer',
+ navigateUpKeyAriaLabel: 'haut',
+ navigateDownKeyAriaLabel: 'bas',
+ closeText: 'fermer',
+ closeKeyAriaLabel: 'sortie',
+ },
+}
diff --git a/theme/src/node/locales/index.ts b/theme/src/node/locales/index.ts
index 8ab2cfa3..084341d6 100644
--- a/theme/src/node/locales/index.ts
+++ b/theme/src/node/locales/index.ts
@@ -1,24 +1,54 @@
+/**
+ * 多语言预设
+ * 除 /zh/ 、 /en/ 外,其它语言预设通过 AI 生成,不保证准确
+ * 如有错误,欢迎提 issue
+ */
import type { DocSearchLocaleOptions } from '@vuepress/plugin-docsearch'
import type { SearchLocaleOptions } from '@vuepress-plume/plugin-search'
import type { PlumeThemeLocaleData, PresetLocale } from '../../shared/index.js'
+import { deDocsearchLocale, deLocale, dePresetLocale, deSearchLocale } from './de.js'
import { enLocale, enPresetLocale, enSearchLocale } from './en.js'
+import { frDocsearchLocale, frLocale, frPresetLocale, frSearchLocale } from './fr.js'
+import { jaDocsearchLocale, jaLocale, jaPresetLocale, jaSearchLocale } from './ja.js'
+import { ruDocsearchLocale, ruLocale, ruPresetLocale, ruSearchLocale } from './ru.js'
import { zhDocsearchLocale, zhLocale, zhPresetLocale, zhSearchLocale } from './zh.js'
+import { zhTwDocsearchLocale, zhTwLocale, zhTwPresetLocale, zhTwSearchLocale } from './zh-tw.js'
export const LOCALE_OPTIONS: Record = {
'/zh/': zhLocale,
'/en/': enLocale,
+ '/zh-tw/': zhTwLocale,
+ '/de/': deLocale,
+ '/fr/': frLocale,
+ '/ru/': ruLocale,
+ '/ja/': jaLocale,
}
export const PRESET_LOCALES: Record = {
'/zh/': zhPresetLocale,
'/en/': enPresetLocale,
+ '/zh-tw/': zhTwPresetLocale,
+ '/de/': dePresetLocale,
+ '/fr/': frPresetLocale,
+ '/ru/': ruPresetLocale,
+ '/ja/': jaPresetLocale,
}
export const DOCSEARCH_LOCALES: Record = {
'/zh/': zhDocsearchLocale,
+ '/zh-tw/': zhTwDocsearchLocale,
+ '/de/': deDocsearchLocale,
+ '/fr/': frDocsearchLocale,
+ '/ru/': ruDocsearchLocale,
+ '/ja/': jaDocsearchLocale,
}
export const SEARCH_LOCALES: Record> = {
'/zh/': zhSearchLocale,
'/en/': enSearchLocale,
+ '/zh-tw/': zhTwSearchLocale,
+ '/de/': deSearchLocale,
+ '/fr/': frSearchLocale,
+ '/ru/': ruSearchLocale,
+ '/ja/': jaSearchLocale,
}
diff --git a/theme/src/node/locales/ja.ts b/theme/src/node/locales/ja.ts
new file mode 100644
index 00000000..d74b4d82
--- /dev/null
+++ b/theme/src/node/locales/ja.ts
@@ -0,0 +1,125 @@
+/** 日语 */
+import type { DocSearchLocaleOptions } from '@vuepress/plugin-docsearch'
+import type { SearchLocaleOptions } from '@vuepress-plume/plugin-search'
+import type { PlumeThemeLocaleData, PresetLocale } from '../../shared/index.js'
+
+export const jaLocale: PlumeThemeLocaleData = {
+ selectLanguageName: '日本語',
+ selectLanguageText: '言語を選択',
+
+ appearanceText: '外観',
+ lightModeSwitchTitle: 'ライトモードに切り替え',
+ darkModeSwitchTitle: 'ダークモードに切り替え',
+
+ outlineLabel: 'このページの内容',
+ returnToTopLabel: 'トップに戻る',
+ editLinkText: 'このページを編集',
+ contributorsText: '貢献者',
+ prevPageLabel: '前のページ',
+ nextPageLabel: '次のページ',
+ lastUpdatedText: '最終更新日',
+
+ changelogText: '変更履歴',
+ changelogOnText: 'に',
+ changelogButtonText: 'すべての変更履歴を見る',
+
+ copyrightText: '著作権',
+ copyrightAuthorText: '著作権者:',
+ copyrightCreationOriginalText: '本文リンク:',
+ copyrightCreationTranslateText: '本文の翻訳元:',
+ copyrightCreationReprintText: '本文の転載元:',
+ copyrightLicenseText: 'ライセンス:',
+
+ notFound: {
+ code: '404',
+ title: 'ページが見つかりません',
+ quote: 'しかし、方向を変えずに探し続ければ、最終的には行きたい場所にたどり着くかもしれません。',
+ linkText: 'ホームに戻る',
+ },
+
+ encryptButtonText: '確認',
+ encryptPlaceholder: 'パスワードを入力してください',
+ encryptGlobalText: 'このサイトはパスワードでのみアクセス可能です',
+ encryptPageText: 'このページはパスワードでのみアクセス可能です',
+
+ footer: {
+ message:
+ 'VuePress & vuepress-theme-plume によって提供されています',
+ },
+}
+
+export const jaPresetLocale: PresetLocale = {
+ 'home': 'ホーム',
+ 'blog': 'ブログ',
+ 'tag': 'タグ',
+ 'archive': 'アーカイブ',
+ 'category': 'カテゴリー',
+ 'archiveTotal': '{count} 件',
+
+ // ------ copyright license ------
+ 'CC0': 'CC0 1.0 パブリックドメイン',
+ 'CC-BY-4.0': '表示 4.0 国際',
+ 'CC-BY-NC-4.0': '表示-非営利 4.0 国際',
+ 'CC-BY-NC-SA-4.0': '表示-非営利-継承 4.0 国際',
+ 'CC-BY-NC-ND-4.0': '表示-非営利-改変禁止 4.0 国際',
+ 'CC-BY-ND-4.0': '表示-改変禁止 4.0 国際',
+ 'CC-BY-SA-4.0': '表示-継承 4.0 国際',
+}
+
+export const jaDocsearchLocale: DocSearchLocaleOptions = {
+ placeholder: 'ドキュメントを検索',
+ translations: {
+ button: {
+ buttonText: 'ドキュメントを検索',
+ buttonAriaLabel: 'ドキュメントを検索',
+ },
+ modal: {
+ searchBox: {
+ resetButtonTitle: 'クエリをクリア',
+ resetButtonAriaLabel: 'クエリをクリア',
+ cancelButtonText: 'キャンセル',
+ cancelButtonAriaLabel: 'キャンセル',
+ },
+ startScreen: {
+ recentSearchesTitle: '最近の検索',
+ noRecentSearchesText: '最近の検索はありません',
+ saveRecentSearchButtonTitle: '最近の検索に保存',
+ removeRecentSearchButtonTitle: '最近の検索から削除',
+ favoriteSearchesTitle: 'お気に入り',
+ removeFavoriteSearchButtonTitle: 'お気に入りから削除',
+ },
+ errorScreen: {
+ titleText: '結果を取得できません',
+ helpText: 'ネットワーク接続を確認する必要があるかもしれません',
+ },
+ footer: {
+ selectText: '選択',
+ navigateText: '切り替え',
+ closeText: '閉じる',
+ searchByText: '検索提供者',
+ },
+ noResultsScreen: {
+ noResultsText: '関連する結果が見つかりません',
+ suggestedQueryText: 'クエリを試すことができます',
+ reportMissingResultsText: 'このクエリに結果があると思いますか?',
+ reportMissingResultsLinkText: 'フィードバックを送信',
+ },
+ },
+ },
+}
+
+export const jaSearchLocale: Partial = {
+ placeholder: 'ドキュメントを検索',
+ resetButtonTitle: '検索をリセット',
+ backButtonTitle: '閉じる',
+ noResultsText: '検索結果がありません:',
+ footer: {
+ selectText: '選択',
+ selectKeyAriaLabel: '入力',
+ navigateText: '切り替え',
+ navigateUpKeyAriaLabel: '上へ',
+ navigateDownKeyAriaLabel: '下へ',
+ closeText: '閉じる',
+ closeKeyAriaLabel: '終了',
+ },
+}
diff --git a/theme/src/node/locales/ru.ts b/theme/src/node/locales/ru.ts
new file mode 100644
index 00000000..04d956b7
--- /dev/null
+++ b/theme/src/node/locales/ru.ts
@@ -0,0 +1,125 @@
+/** 俄语 */
+import type { DocSearchLocaleOptions } from '@vuepress/plugin-docsearch'
+import type { SearchLocaleOptions } from '@vuepress-plume/plugin-search'
+import type { PlumeThemeLocaleData, PresetLocale } from '../../shared/index.js'
+
+export const ruLocale: PlumeThemeLocaleData = {
+ selectLanguageName: 'Русский',
+ selectLanguageText: 'Выберите язык',
+
+ appearanceText: 'Внешний вид',
+ lightModeSwitchTitle: 'Переключить на светлую тему',
+ darkModeSwitchTitle: 'Переключить на темную тему',
+
+ outlineLabel: 'Содержание страницы',
+ returnToTopLabel: 'Вернуться наверх',
+ editLinkText: 'Редактировать страницу',
+ contributorsText: 'Авторы',
+ prevPageLabel: 'Предыдущая страница',
+ nextPageLabel: 'Следующая страница',
+ lastUpdatedText: 'Последнее обновление',
+
+ changelogText: 'История изменений',
+ changelogOnText: 'от',
+ changelogButtonText: 'Посмотреть все изменения',
+
+ copyrightText: 'Все права защищены',
+ copyrightAuthorText: 'Авторские права принадлежат:',
+ copyrightCreationOriginalText: 'Ссылка на статью:',
+ copyrightCreationTranslateText: 'Перевод статьи:',
+ copyrightCreationReprintText: 'Перепечатано из:',
+ copyrightLicenseText: 'Лицензия:',
+
+ notFound: {
+ code: '404',
+ title: 'Страница не найдена',
+ quote: 'Но если вы не меняете курс и продолжаете искать, в конечном итоге вы можете добраться до места назначения.',
+ linkText: 'Вернуться на главную',
+ },
+
+ encryptButtonText: 'Подтвердить',
+ encryptPlaceholder: 'Введите пароль',
+ encryptGlobalText: 'Доступ к сайту только по паролю',
+ encryptPageText: 'Доступ к странице только по паролю',
+
+ footer: {
+ message:
+ 'Работает на VuePress & vuepress-theme-plume',
+ },
+}
+
+export const ruPresetLocale: PresetLocale = {
+ 'home': 'Главная',
+ 'blog': 'Блог',
+ 'tag': 'Теги',
+ 'archive': 'Архив',
+ 'category': 'Категории',
+ 'archiveTotal': '{count} статей',
+
+ // ------ copyright license ------
+ 'CC0': 'CC0 1.0 Универсальная',
+ 'CC-BY-4.0': 'Атрибуция 4.0 Международный',
+ 'CC-BY-NC-4.0': 'Атрибуция-Некоммерческое 4.0 Международный',
+ 'CC-BY-NC-SA-4.0': 'Атрибуция-Некоммерческое-С сохранением условий 4.0 Международный',
+ 'CC-BY-NC-ND-4.0': 'Атрибуция-Некоммерческое-Без производных 4.0 Международный',
+ 'CC-BY-ND-4.0': 'Атрибуция-Без производных 4.0 Международный',
+ 'CC-BY-SA-4.0': 'Атрибуция-С сохранением условий 4.0 Международный',
+}
+
+export const ruDocsearchLocale: DocSearchLocaleOptions = {
+ placeholder: 'Поиск по документации',
+ translations: {
+ button: {
+ buttonText: 'Поиск по документации',
+ buttonAriaLabel: 'Поиск по документации',
+ },
+ modal: {
+ searchBox: {
+ resetButtonTitle: 'Очистить условия поиска',
+ resetButtonAriaLabel: 'Очистить условия поиска',
+ cancelButtonText: 'Отмена',
+ cancelButtonAriaLabel: 'Отмена',
+ },
+ startScreen: {
+ recentSearchesTitle: 'История поиска',
+ noRecentSearchesText: 'Нет истории поиска',
+ saveRecentSearchButtonTitle: 'Сохранить в историю поиска',
+ removeRecentSearchButtonTitle: 'Удалить из истории поиска',
+ favoriteSearchesTitle: 'Избранное',
+ removeFavoriteSearchButtonTitle: 'Удалить из избранного',
+ },
+ errorScreen: {
+ titleText: 'Не удалось получить результаты',
+ helpText: 'Возможно, вам нужно проверить подключение к интернету',
+ },
+ footer: {
+ selectText: 'Выбрать',
+ navigateText: 'Переключить',
+ closeText: 'Закрыть',
+ searchByText: 'Поиск предоставлен',
+ },
+ noResultsScreen: {
+ noResultsText: 'Не найдено соответствующих результатов',
+ suggestedQueryText: 'Вы можете попробовать запрос',
+ reportMissingResultsText: 'Считаете, что этот запрос должен вернуть результаты?',
+ reportMissingResultsLinkText: 'Нажмите, чтобы сообщить',
+ },
+ },
+ },
+}
+
+export const ruSearchLocale: Partial = {
+ placeholder: 'Поиск по документации',
+ resetButtonTitle: 'Сбросить поиск',
+ backButtonTitle: 'Закрыть',
+ noResultsText: 'Нет результатов поиска:',
+ footer: {
+ selectText: 'Выбрать',
+ selectKeyAriaLabel: 'Ввод',
+ navigateText: 'Переключить',
+ navigateUpKeyAriaLabel: 'Вверх',
+ navigateDownKeyAriaLabel: 'Вниз',
+ closeText: 'Закрыть',
+ closeKeyAriaLabel: 'Выход',
+ },
+}
diff --git a/theme/src/node/locales/zh-tw.ts b/theme/src/node/locales/zh-tw.ts
new file mode 100644
index 00000000..d61915b6
--- /dev/null
+++ b/theme/src/node/locales/zh-tw.ts
@@ -0,0 +1,125 @@
+/** 繁体中文 */
+import type { DocSearchLocaleOptions } from '@vuepress/plugin-docsearch'
+import type { SearchLocaleOptions } from '@vuepress-plume/plugin-search'
+import type { PlumeThemeLocaleData, PresetLocale } from '../../shared/index.js'
+
+export const zhTwLocale: PlumeThemeLocaleData = {
+ selectLanguageName: '繁體中文',
+ selectLanguageText: '選擇語言',
+
+ appearanceText: '外觀',
+ lightModeSwitchTitle: '切換為淺色主題',
+ darkModeSwitchTitle: '切換為深色主題',
+
+ outlineLabel: '此頁內容',
+ returnToTopLabel: '返回頂部',
+ editLinkText: '編輯此頁',
+ contributorsText: '貢獻者',
+ prevPageLabel: '上一頁',
+ nextPageLabel: '下一頁',
+ lastUpdatedText: '最後更新於',
+
+ changelogText: '變更歷史',
+ changelogOnText: '於',
+ changelogButtonText: '查看全部變更歷史',
+
+ copyrightText: '版權所有',
+ copyrightAuthorText: '版權歸屬於:',
+ copyrightCreationOriginalText: '本文連結:',
+ copyrightCreationTranslateText: '本文翻譯自:',
+ copyrightCreationReprintText: '本文轉載自:',
+ copyrightLicenseText: '許可證:',
+
+ notFound: {
+ code: '404',
+ title: '頁面未找到',
+ quote: '但是,如果你不改變方向,並且一直尋找,最終可能會到達你要去的地方。',
+ linkText: '返回首頁',
+ },
+
+ encryptButtonText: '確認',
+ encryptPlaceholder: '請輸入密碼',
+ encryptGlobalText: '本站只允許密碼訪問',
+ encryptPageText: '本頁面只允許密碼訪問',
+
+ footer: {
+ message:
+ 'Powered by VuePress & vuepress-theme-plume',
+ },
+}
+
+export const zhTwPresetLocale: PresetLocale = {
+ 'home': '首頁',
+ 'blog': '博客',
+ 'tag': '標籤',
+ 'archive': '歸檔',
+ 'category': '分類',
+ 'archiveTotal': '{count} 篇',
+
+ // ------ copyright license ------
+ 'CC0': 'CC0 1.0 通用',
+ 'CC-BY-4.0': '署名 4.0 國際',
+ 'CC-BY-NC-4.0': '署名-非商業性 4.0 國際',
+ 'CC-BY-NC-SA-4.0': '署名-非商業性-相同方式共享 4.0 國際',
+ 'CC-BY-NC-ND-4.0': '署名-非商業性-禁止演繹 4.0 國際',
+ 'CC-BY-ND-4.0': '署名-禁止演繹 4.0 國際',
+ 'CC-BY-SA-4.0': '署名-相同方式共享 4.0 國際',
+}
+
+export const zhTwDocsearchLocale: DocSearchLocaleOptions = {
+ placeholder: '搜索文檔',
+ translations: {
+ button: {
+ buttonText: '搜索文檔',
+ buttonAriaLabel: '搜索文檔',
+ },
+ modal: {
+ searchBox: {
+ resetButtonTitle: '清除查詢條件',
+ resetButtonAriaLabel: '清除查詢條件',
+ cancelButtonText: '取消',
+ cancelButtonAriaLabel: '取消',
+ },
+ startScreen: {
+ recentSearchesTitle: '搜索歷史',
+ noRecentSearchesText: '沒有搜索歷史',
+ saveRecentSearchButtonTitle: '保存至搜索歷史',
+ removeRecentSearchButtonTitle: '從搜索歷史中移除',
+ favoriteSearchesTitle: '收藏',
+ removeFavoriteSearchButtonTitle: '從收藏中移除',
+ },
+ errorScreen: {
+ titleText: '無法獲取結果',
+ helpText: '你可能需要檢查你的網絡連接',
+ },
+ footer: {
+ selectText: '選擇',
+ navigateText: '切換',
+ closeText: '關閉',
+ searchByText: '搜索提供者',
+ },
+ noResultsScreen: {
+ noResultsText: '無法找到相關結果',
+ suggestedQueryText: '你可以嘗試查詢',
+ reportMissingResultsText: '你認為該查詢應該有結果?',
+ reportMissingResultsLinkText: '點擊反饋',
+ },
+ },
+ },
+}
+
+export const zhTwSearchLocale: Partial = {
+ placeholder: '搜索文檔',
+ resetButtonTitle: '重置搜索',
+ backButtonTitle: '關閉',
+ noResultsText: '無搜索結果:',
+ footer: {
+ selectText: '選擇',
+ selectKeyAriaLabel: '輸入',
+ navigateText: '切換',
+ navigateUpKeyAriaLabel: '向上',
+ navigateDownKeyAriaLabel: '向下',
+ closeText: '關閉',
+ closeKeyAriaLabel: '退出',
+ },
+}