Merge pull request #372 from kimatata/develop
This commit is contained in:
@@ -83,8 +83,10 @@ Support team development by adding or removing members from projects. You can as
|
|||||||
|
|
||||||
UnitTCMS currently supports the following languages:
|
UnitTCMS currently supports the following languages:
|
||||||
|
|
||||||
|
- German (de)
|
||||||
- English (en)
|
- English (en)
|
||||||
- Japanese (ja)
|
|
||||||
- Portuguese (pt-BR)
|
- Portuguese (pt-BR)
|
||||||
|
- Chinese (zh-CN)
|
||||||
|
- Japanese (ja)
|
||||||
|
|
||||||
If you would like to add support for another language, feel free to submit a pull request. For reference, you can see how Portuguese was added in [PR #260](https://github.com/kimatata/unittcms/pull/260).
|
If you would like to add support for another language, feel free to submit a pull request. For reference, you can see how Portuguese was added in [PR #260](https://github.com/kimatata/unittcms/pull/260).
|
||||||
|
|||||||
@@ -9,10 +9,17 @@ const memberRoles: MemberRoleType[] = [{ uid: 'manager' }, { uid: 'developer' },
|
|||||||
|
|
||||||
const categoricalPalette = ['#fba91e', '#6ea56c', '#3ac6e1', '#feda2f', '#f15f47', '#244470', '#9c80bb', '#f595a6'];
|
const categoricalPalette = ['#fba91e', '#6ea56c', '#3ac6e1', '#feda2f', '#f15f47', '#244470', '#9c80bb', '#f595a6'];
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Locales are grouped by script: Latin-based locales first, followed by CJK.
|
||||||
|
* Within Latin-based group, entries are sorted lexicographically by their BCP 47 codes.
|
||||||
|
* This matches common UI patterns.
|
||||||
|
*/
|
||||||
const locales: LocaleType[] = [
|
const locales: LocaleType[] = [
|
||||||
|
{ code: 'de', name: 'Deutsch' },
|
||||||
{ code: 'en', name: 'English' },
|
{ code: 'en', name: 'English' },
|
||||||
{ code: 'ja', name: '日本語' },
|
|
||||||
{ code: 'pt-BR', name: 'Português' },
|
{ code: 'pt-BR', name: 'Português' },
|
||||||
|
{ code: 'zh-CN', name: '简体中文' },
|
||||||
|
{ code: 'ja', name: '日本語' },
|
||||||
];
|
];
|
||||||
|
|
||||||
// The status of each test run
|
// The status of each test run
|
||||||
|
|||||||
408
frontend/messages/de.json
Normal file
408
frontend/messages/de.json
Normal file
@@ -0,0 +1,408 @@
|
|||||||
|
{
|
||||||
|
"RunStatus": {
|
||||||
|
"new": "Neu",
|
||||||
|
"inProgress": "In Bearbeitung",
|
||||||
|
"underReview": "In Überprüfung",
|
||||||
|
"rejected": "Abgelehnt",
|
||||||
|
"done": "Fertig",
|
||||||
|
"closed": "Geschlossen"
|
||||||
|
},
|
||||||
|
"RunCaseStatus": {
|
||||||
|
"untested": "Nicht getestet",
|
||||||
|
"passed": "Bestanden",
|
||||||
|
"failed": "Fehlgeschlagen",
|
||||||
|
"retest": "Erneut testen",
|
||||||
|
"skipped": "Übersprungen"
|
||||||
|
},
|
||||||
|
"Priority": {
|
||||||
|
"critical": "Kritisch",
|
||||||
|
"high": "Hoch",
|
||||||
|
"medium": "Mittel",
|
||||||
|
"low": "Niedrig"
|
||||||
|
},
|
||||||
|
"Type": {
|
||||||
|
"other": "Sonstiges",
|
||||||
|
"security": "Sicherheit",
|
||||||
|
"performance": "Leistung",
|
||||||
|
"accessibility": "Barrierefreiheit",
|
||||||
|
"functional": "Funktional",
|
||||||
|
"acceptance": "Abnahme",
|
||||||
|
"usability": "Benutzbarkeit",
|
||||||
|
"smoke_sanity": "Smoke & Sanity",
|
||||||
|
"compatibility": "Kompatibilität",
|
||||||
|
"destructive": "Destruktiv",
|
||||||
|
"regression": "Regression",
|
||||||
|
"automated": "Automatisiert",
|
||||||
|
"manual": "Manuell"
|
||||||
|
},
|
||||||
|
"ProjectDialog": {
|
||||||
|
"project": "Projekt",
|
||||||
|
"project_name": "Projektname",
|
||||||
|
"project_detail": "Projektbeschreibung",
|
||||||
|
"public": "Öffentlich",
|
||||||
|
"private": "Privat",
|
||||||
|
"if_you_make_public": "Ein öffentliches Projekt ist für alle sichtbar, die keine Mitglieder sind.",
|
||||||
|
"close": "Schließen",
|
||||||
|
"create": "Erstellen",
|
||||||
|
"update": "Aktualisieren",
|
||||||
|
"please_enter": "Bitte Projektnamen eingeben"
|
||||||
|
},
|
||||||
|
"Index": {
|
||||||
|
"get_started": "Loslegen",
|
||||||
|
"demo": "Demo",
|
||||||
|
"oss_tcms": "Open Source Testfall-Management-System",
|
||||||
|
"integrate_and_manage": "Integriere und verwalte alle Softwaretests.",
|
||||||
|
"oss_title": "Open Source",
|
||||||
|
"oss_detail": "UnitTCMS ist kostenlos und Open Source. Die Anwendung kann selbst gehostet werden und ist für Umgebungen mit hohen Sicherheitsanforderungen geeignet.",
|
||||||
|
"organize_title": "Testfälle organisieren",
|
||||||
|
"organize_detail": "Testfälle können nach Projekten und Ordnern organisiert werden. Das moderne UI macht sie schnell.",
|
||||||
|
"usability_title": "Benutzbarkeit",
|
||||||
|
"usability_detail": "Definierte Testfälle können mehrfach in Testläufen verwendet werden. Der Status von Testläufen und Projekten ist grafisch sichtbar.",
|
||||||
|
"universal_title": "Universell",
|
||||||
|
"universal_detail": "Mehrsprachigkeit und Dark Mode ermöglichen eine flexible Nutzung.",
|
||||||
|
"project_title": "Projektbasiert",
|
||||||
|
"project_subtitle": "Verwalte Testfälle und Testläufe projektweise. Das Dashboard zeigt den Fortschritt und die Typen der Testfälle für jedes Projekt.",
|
||||||
|
"case_management_title": "Testfallverwaltung",
|
||||||
|
"case_management_subtitle": "Erstelle Ordner in Projekten und definiere Testfälle einfach mit dem modernen UI. Dateien können angehängt werden, um Testfälle detailliert zu beschreiben.",
|
||||||
|
"run_management_title": "Testlaufverwaltung",
|
||||||
|
"run_management_subtitle": "Definierte Testfälle können mehrfach in Testläufen verwendet werden. Der Status ist visuell nachvollziehbar.",
|
||||||
|
"member_management_title": "Mitgliederverwaltung",
|
||||||
|
"member_management_subtitle": "Füge Mitglieder hinzu oder entferne sie. Rollen und Rechte können detailliert vergeben werden: 'Manager', 'Entwickler', 'Reporter'."
|
||||||
|
},
|
||||||
|
"Header": {
|
||||||
|
"title": "Open Source Test-Management-System",
|
||||||
|
"description": "Integriere und verwalte alle Softwaretests",
|
||||||
|
"docs": "Dokumentation",
|
||||||
|
"roadmap": "Fahrplan",
|
||||||
|
"projects": "Projekte",
|
||||||
|
"admin": "Administration",
|
||||||
|
"account": "Konto",
|
||||||
|
"profile_settings": "Profileinstellungen",
|
||||||
|
"signup": "Registrieren",
|
||||||
|
"signin": "Anmelden",
|
||||||
|
"signout": "Abmelden",
|
||||||
|
"links": "Links",
|
||||||
|
"languages": "Sprachen"
|
||||||
|
},
|
||||||
|
"Toast": {
|
||||||
|
"need_signed_in": "Du musst dich anmelden",
|
||||||
|
"session_expired": "Sitzung abgelaufen"
|
||||||
|
},
|
||||||
|
"Auth": {
|
||||||
|
"account": "Konto",
|
||||||
|
"signup": "Registrieren",
|
||||||
|
"signin": "Anmelden",
|
||||||
|
"or_signup": "Noch kein Konto?",
|
||||||
|
"or_signin": "Schon registriert?",
|
||||||
|
"signin_as_guest": "Oder als Gast anmelden",
|
||||||
|
"email": "E-Mail",
|
||||||
|
"username": "Benutzername",
|
||||||
|
"password": "Passwort",
|
||||||
|
"confirm_password": "Passwort (Bestätigung)",
|
||||||
|
"invalid_email": "Ungültige E-Mail",
|
||||||
|
"invalid_password": "Passwort muss mindestens 8 Zeichen haben",
|
||||||
|
"username_empty": "Benutzername ist leer",
|
||||||
|
"password_empty": "Passwort ist leer",
|
||||||
|
"password_not_match": "Passwörter stimmen nicht überein",
|
||||||
|
"email_already_exist": "E-Mail bereits registriert",
|
||||||
|
"email_not_exist": "E-Mail-Adresse nicht gefunden",
|
||||||
|
"signup_error": "Registrierung fehlgeschlagen",
|
||||||
|
"signin_error": "Anmeldung fehlgeschlagen",
|
||||||
|
"demo_page_warning": "Dies ist eine Demo-Umgebung. Alle Daten werden regelmäßig zurückgesetzt.",
|
||||||
|
"your_projects": "Deine Projekte",
|
||||||
|
"public": "Öffentlich",
|
||||||
|
"private": "Privat",
|
||||||
|
"not_own_any_projects": "Du besitzt keine Projekte.",
|
||||||
|
"find_projects": "Projekte finden",
|
||||||
|
"profile_settings": "Profileinstellungen",
|
||||||
|
"change_username": "Benutzernamen ändern",
|
||||||
|
"new_username": "Neuer Benutzername",
|
||||||
|
"update_username": "Benutzernamen aktualisieren",
|
||||||
|
"username_updated": "Benutzername erfolgreich geändert",
|
||||||
|
"change_password": "Passwort ändern",
|
||||||
|
"current_password": "Aktuelles Passwort",
|
||||||
|
"new_password": "Neues Passwort",
|
||||||
|
"confirm_new_password": "Neues Passwort bestätigen",
|
||||||
|
"update_password": "Passwort aktualisieren",
|
||||||
|
"password_updated": "Passwort erfolgreich geändert",
|
||||||
|
"change_avatar": "Avatar ändern",
|
||||||
|
"upload_avatar": "Avatar hochladen",
|
||||||
|
"remove_avatar": "Avatar entfernen",
|
||||||
|
"avatar_updated": "Avatar erfolgreich geändert",
|
||||||
|
"avatar_removed": "Avatar erfolgreich entfernt",
|
||||||
|
"max_file_size_5mb": "Max. Dateigröße: 5MB",
|
||||||
|
"only_images_allowed": "Nur Bilddateien erlaubt",
|
||||||
|
"current_password_incorrect": "Aktuelles Passwort ist falsch",
|
||||||
|
"update_error": "Aktualisierung fehlgeschlagen"
|
||||||
|
},
|
||||||
|
"Health": {
|
||||||
|
"health_check": "Health Check",
|
||||||
|
"status": "Status",
|
||||||
|
"ok": "OK",
|
||||||
|
"error": "Error",
|
||||||
|
"api_server": "API Server",
|
||||||
|
"unittcms_version": "UnitTCMS Version"
|
||||||
|
},
|
||||||
|
"Admin": {
|
||||||
|
"user_management": "Benutzerverwaltung",
|
||||||
|
"avatar": "Avatar",
|
||||||
|
"id": "ID",
|
||||||
|
"email": "E-Mail",
|
||||||
|
"username": "Benutzername",
|
||||||
|
"role": "Rolle",
|
||||||
|
"administrator": "Administrator",
|
||||||
|
"user": "Benutzer",
|
||||||
|
"no_users_found": "Keine Benutzer gefunden",
|
||||||
|
"quit_admin": "Administratorrolle abgeben",
|
||||||
|
"close": "Schließen",
|
||||||
|
"quit": "Abgeben",
|
||||||
|
"quit_confirm": "Wenn du deine Administratorrechte abgibst, kannst du nicht mehr auf die Administrationsseite zugreifen.",
|
||||||
|
"role_changed": "Rolle geändert",
|
||||||
|
"lost_admin_auth": "Administratorrechte verloren",
|
||||||
|
"at_least": "Mindestens ein Administrator wird benötigt",
|
||||||
|
"reset_password": "Passwort zurücksetzen",
|
||||||
|
"reset": "Zurücksetzen",
|
||||||
|
"invalid_password": "Passwort muss mindestens 8 Zeichen haben",
|
||||||
|
"password_not_match": "Passwörter stimmen nicht überein"
|
||||||
|
},
|
||||||
|
"Projects": {
|
||||||
|
"project_list": "Projektliste",
|
||||||
|
"new_project": "Neues Projekt",
|
||||||
|
"id": "ID",
|
||||||
|
"publicity": "Sichtbarkeit",
|
||||||
|
"public": "Öffentlich",
|
||||||
|
"private": "Privat",
|
||||||
|
"name": "Name",
|
||||||
|
"detail": "Beschreibung",
|
||||||
|
"last_update": "Letzte Aktualisierung",
|
||||||
|
"no_projects_found": "Keine Projekte gefunden"
|
||||||
|
},
|
||||||
|
"Project": {
|
||||||
|
"project": "Projekt",
|
||||||
|
"toggle_sidebar": "Seitenleiste anzeigen/verbergen",
|
||||||
|
"home": "Startseite",
|
||||||
|
"test_cases": "Testfälle",
|
||||||
|
"test_runs": "Testläufe",
|
||||||
|
"members": "Mitglieder",
|
||||||
|
"settings": "Einstellungen"
|
||||||
|
},
|
||||||
|
"Home": {
|
||||||
|
"home": "Startseite",
|
||||||
|
"Folders": "Ordner",
|
||||||
|
"test_cases": "Testfälle",
|
||||||
|
"test_runs": "Testläufe",
|
||||||
|
"progress": "Fortschritt",
|
||||||
|
"test_classification": "Test-Klassifizierung",
|
||||||
|
"by_type": "Nach Typ",
|
||||||
|
"by_priority": "Nach Priorität"
|
||||||
|
},
|
||||||
|
"Folders": {
|
||||||
|
"folder": "Ordner",
|
||||||
|
"new_folder": "Neuer Ordner",
|
||||||
|
"edit_folder": "Ordner bearbeiten",
|
||||||
|
"delete_folder": "Ordner löschen",
|
||||||
|
"folder_name": "Ordnername",
|
||||||
|
"folder_detail": "Ordnerbeschreibung",
|
||||||
|
"close": "Schließen",
|
||||||
|
"create": "Erstellen",
|
||||||
|
"update": "Aktualisieren",
|
||||||
|
"please_enter": "Bitte Ordnernamen eingeben",
|
||||||
|
"delete": "Löschen",
|
||||||
|
"are_you_sure": "Möchtest du den Ordner wirklich löschen?",
|
||||||
|
"no_folders_found": "Keine Ordner gefunden"
|
||||||
|
},
|
||||||
|
"Cases": {
|
||||||
|
"test_case_list": "Testfallliste",
|
||||||
|
"id": "ID",
|
||||||
|
"title": "Titel",
|
||||||
|
"priority": "Priorität",
|
||||||
|
"actions": "Aktionen",
|
||||||
|
"delete_case": "Testfall löschen",
|
||||||
|
"delete": "Löschen",
|
||||||
|
"close": "Schließen",
|
||||||
|
"are_you_sure": "Möchtest du die Testfälle wirklich löschen?",
|
||||||
|
"new_test_case": "Neu",
|
||||||
|
"export": "Exportieren",
|
||||||
|
"status": "Status",
|
||||||
|
"no_cases_found": "Keine Testfälle gefunden",
|
||||||
|
"case_title": "Testfall-Titel",
|
||||||
|
"case_description": "Testfall-Beschreibung",
|
||||||
|
"case_title_or_description": "Testfall-Titel oder Beschreibung",
|
||||||
|
"create": "Erstellen",
|
||||||
|
"please_enter": "Bitte Testfall-Titel eingeben",
|
||||||
|
"filter": "Filter",
|
||||||
|
"clear_all": "Alle löschen",
|
||||||
|
"apply": "Anwenden",
|
||||||
|
"select_priorities": "Prioritäten auswählen",
|
||||||
|
"selected": "Ausgewählt",
|
||||||
|
"type": "Typ",
|
||||||
|
"select_types": "Typen auswählen",
|
||||||
|
"cases_selected": "ausgewählte Testfälle",
|
||||||
|
"select_action": "Aktion auswählen",
|
||||||
|
"move": "Verschieben",
|
||||||
|
"clone": "Klonen",
|
||||||
|
"cases_moved": "Testfälle verschoben",
|
||||||
|
"cases_cloned": "Testfälle geklont",
|
||||||
|
"tags": "Tags",
|
||||||
|
"select_tags": "Tags auswählen",
|
||||||
|
"import": "Importieren",
|
||||||
|
"import_cases": "Testfälle importieren",
|
||||||
|
"import_available": "Du kannst Testfälle aus einer Excel-Datei (xlsx, xls) importieren. Die Datei muss dem vorgegebenen Format entsprechen.",
|
||||||
|
"download_template": "Vorlage herunterladen",
|
||||||
|
"click_to_upload": "Zum Hochladen klicken",
|
||||||
|
"or_drag_and_drop": " oder per Drag & Drop",
|
||||||
|
"max_file_size": "Max. Dateigröße",
|
||||||
|
"cases_imported": "Testfälle importiert",
|
||||||
|
"create_more": "Weitere erstellen"
|
||||||
|
},
|
||||||
|
"Case": {
|
||||||
|
"back_to_cases": "Zurück zu Testfällen",
|
||||||
|
"updating": "Wird aktualisiert...",
|
||||||
|
"update": "Aktualisieren",
|
||||||
|
"updated_test_case": "Testfall aktualisiert",
|
||||||
|
"basic": "Basis",
|
||||||
|
"title": "Titel",
|
||||||
|
"please_enter_title": "Bitte Titel eingeben",
|
||||||
|
"description": "Beschreibung",
|
||||||
|
"test_case_description": "Testfall-Beschreibung",
|
||||||
|
"priority": "Priorität",
|
||||||
|
"type": "Typ",
|
||||||
|
"template": "Vorlage",
|
||||||
|
"test_detail": "Testdetails",
|
||||||
|
"preconditions": "Voraussetzungen",
|
||||||
|
"expected_result": "Erwartetes Ergebnis",
|
||||||
|
"step": "Schritt",
|
||||||
|
"text": "Text",
|
||||||
|
"steps": "Schritte",
|
||||||
|
"new_step": "Neuer Schritt",
|
||||||
|
"details_of_the_step": "Details des Schritts",
|
||||||
|
"delete_this_step": "Diesen Schritt löschen",
|
||||||
|
"insert_step": "Schritt einfügen",
|
||||||
|
"attachments": "Anhänge",
|
||||||
|
"delete": "Löschen",
|
||||||
|
"download": "Herunterladen",
|
||||||
|
"delete_file": "Datei löschen",
|
||||||
|
"click_to_upload": "Zum Hochladen klicken",
|
||||||
|
"or_drag_and_drop": " oder per Drag & Drop",
|
||||||
|
"max_file_size": "Max. Dateigröße",
|
||||||
|
"are_you_sure_leave": "Möchtest du die Seite wirklich verlassen?",
|
||||||
|
"tags": "Tags",
|
||||||
|
"create_tag": "Tag erstellen",
|
||||||
|
"max_tags_limit": "Maximale Anzahl Tags erreicht",
|
||||||
|
"tag_already_exists": "Tag existiert bereits",
|
||||||
|
"tag_created_and_added": "Tag erstellt und hinzugefügt",
|
||||||
|
"error_creating_tag": "Fehler beim Erstellen des Tags",
|
||||||
|
"error_updating_test_case": "Fehler beim Aktualisieren des Testfalls",
|
||||||
|
"search_or_create_tag": "Tag suchen oder erstellen",
|
||||||
|
"no_tags_selected": "Keine Tags ausgewählt"
|
||||||
|
},
|
||||||
|
"Runs": {
|
||||||
|
"run_list": "Testlauf-Liste",
|
||||||
|
"run": "Testlauf",
|
||||||
|
"new_run": "Neuer Testlauf",
|
||||||
|
"edit_run": "Testlauf bearbeiten",
|
||||||
|
"delete_run": "Testlauf löschen",
|
||||||
|
"id": "ID",
|
||||||
|
"name": "Name",
|
||||||
|
"description": "Beschreibung",
|
||||||
|
"last_update": "Letzte Aktualisierung",
|
||||||
|
"actions": "Aktionen",
|
||||||
|
"run_name": "Name des Testlaufs",
|
||||||
|
"run_description": "Beschreibung des Testlaufs",
|
||||||
|
"no_runs_found": "Keine Testläufe gefunden",
|
||||||
|
"close": "Schließen",
|
||||||
|
"create": "Erstellen",
|
||||||
|
"update": "Aktualisieren",
|
||||||
|
"please_enter": "Bitte Name des Testlaufs eingeben",
|
||||||
|
"are_you_sure": "Möchtest du den Testlauf wirklich löschen?",
|
||||||
|
"delete": "Löschen"
|
||||||
|
},
|
||||||
|
"Run": {
|
||||||
|
"back_to_runs": "Zurück zu Testläufen",
|
||||||
|
"updating": "Wird aktualisiert...",
|
||||||
|
"update": "Aktualisieren",
|
||||||
|
"updated_test_run": "Testlauf aktualisiert",
|
||||||
|
"export": "Exportieren",
|
||||||
|
"progress": "Fortschritt",
|
||||||
|
"refresh": "Aktualisieren",
|
||||||
|
"id": "ID",
|
||||||
|
"title": "Titel",
|
||||||
|
"please_enter": "Bitte Name des Testlaufs eingeben",
|
||||||
|
"description": "Beschreibung",
|
||||||
|
"priority": "Priorität",
|
||||||
|
"status": "Status",
|
||||||
|
"actions": "Aktionen",
|
||||||
|
"select_test_case": "Testfälle auswählen",
|
||||||
|
"test_case_selection": "Testfall-Auswahl",
|
||||||
|
"include_in_run": "In Testlauf aufnehmen",
|
||||||
|
"exclude_from_run": "Aus Testlauf entfernen",
|
||||||
|
"no_cases_found": "Keine Testfälle gefunden",
|
||||||
|
"are_you_sure_leave": "Möchtest du die Seite wirklich verlassen?",
|
||||||
|
"type": "Typ",
|
||||||
|
"test_detail": "Testdetails",
|
||||||
|
"steps": "Schritte",
|
||||||
|
"preconditions": "Voraussetzungen",
|
||||||
|
"expected_result": "Erwartetes Ergebnis",
|
||||||
|
"details_of_the_step": "Details des Schritts",
|
||||||
|
"close": "Schließen",
|
||||||
|
"filter": "Filter",
|
||||||
|
"clear_all": "Alle löschen",
|
||||||
|
"apply": "Anwenden",
|
||||||
|
"select_status": "Status auswählen",
|
||||||
|
"please_save": "Bitte Änderungen speichern",
|
||||||
|
"case_title_or_description": "Testfall-Titel oder Beschreibung",
|
||||||
|
"selected": "Ausgewählt",
|
||||||
|
"tags": "Tags",
|
||||||
|
"select_tags": "Tags auswählen"
|
||||||
|
},
|
||||||
|
"Members": {
|
||||||
|
"member_management": "Mitgliederverwaltung",
|
||||||
|
"avatar": "Avatar",
|
||||||
|
"email": "E-Mail",
|
||||||
|
"username": "Benutzername",
|
||||||
|
"role": "Rolle",
|
||||||
|
"manager": "Manager",
|
||||||
|
"developer": "Entwickler",
|
||||||
|
"reporter": "Reporter",
|
||||||
|
"delete": "Löschen",
|
||||||
|
"deleteMember": "Mitglied entfernen",
|
||||||
|
"no_members_found": "Keine Mitglieder gefunden",
|
||||||
|
"add_member": "Mitglied hinzufügen",
|
||||||
|
"user_name_or_email": "Benutzername oder E-Mail",
|
||||||
|
"close": "Schließen",
|
||||||
|
"add": "Hinzufügen",
|
||||||
|
"are_you_sure": "Möchtest du das Mitglied wirklich löschen?",
|
||||||
|
"member_added": "Mitglied hinzugefügt",
|
||||||
|
"role_changed": "Rollenänderung gespeichert",
|
||||||
|
"member_deleted": "Mitglied entfernt"
|
||||||
|
},
|
||||||
|
"Settings": {
|
||||||
|
"project_management": "Projektverwaltung",
|
||||||
|
"project_name": "Projektname",
|
||||||
|
"project_detail": "Projektbeschreibung",
|
||||||
|
"project_owner": "Projektinhaber",
|
||||||
|
"edit_project": "Projekt bearbeiten",
|
||||||
|
"publicity": "Sichtbarkeit",
|
||||||
|
"public": "Öffentlich",
|
||||||
|
"private": "Privat",
|
||||||
|
"delete_project": "Projekt löschen",
|
||||||
|
"delete": "Löschen",
|
||||||
|
"close": "Schließen",
|
||||||
|
"are_you_sure": "Möchtest du das Projekt wirklich löschen?",
|
||||||
|
"tag_management": "Tag-Verwaltung",
|
||||||
|
"tag_name": "Tag-Name",
|
||||||
|
"add_tag": "Tag hinzufügen",
|
||||||
|
"no_tags_available": "Keine Tags verfügbar",
|
||||||
|
"delete_tag": "Tag löschen",
|
||||||
|
"are_you_sure_delete_tag": "Möchtest du diesen Tag wirklich löschen?",
|
||||||
|
"tag_created": "Tag erfolgreich erstellt.",
|
||||||
|
"tag_updated": "Tag erfolgreich aktualisiert.",
|
||||||
|
"tag_deleted": "Tag erfolgreich gelöscht.",
|
||||||
|
"tag_error_empty": "Tag-Name darf nicht leer sein.",
|
||||||
|
"tag_error_min_length": "Tag-Name muss mindestens 3 Zeichen lang sein.",
|
||||||
|
"tag_error_max_length": "Tag-Name darf nicht länger als 20 Zeichen sein.",
|
||||||
|
"tag_error_create": "Tag konnte nicht erstellt werden. Bitte versuche es erneut.",
|
||||||
|
"tag_error_update": "Tag konnte nicht aktualisiert werden. Bitte versuche es erneut.",
|
||||||
|
"tag_error_delete": "Tag konnte nicht gelöscht werden. Bitte versuche es erneut."
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -1,7 +1,9 @@
|
|||||||
import { describe, it, expect } from 'vitest';
|
import { describe, it, expect } from 'vitest';
|
||||||
|
import de from './de.json';
|
||||||
import en from './en.json';
|
import en from './en.json';
|
||||||
import ja from './ja.json';
|
|
||||||
import ptBR from './pt-BR.json';
|
import ptBR from './pt-BR.json';
|
||||||
|
import zhCN from './zh-CN.json';
|
||||||
|
import ja from './ja.json';
|
||||||
|
|
||||||
function getAllKeys(obj: unknown, prefix = ''): string[] {
|
function getAllKeys(obj: unknown, prefix = ''): string[] {
|
||||||
if (typeof obj !== 'object' || obj === null) return [];
|
if (typeof obj !== 'object' || obj === null) return [];
|
||||||
@@ -16,12 +18,15 @@ function getAllKeys(obj: unknown, prefix = ''): string[] {
|
|||||||
|
|
||||||
describe('Locale message keys consistency', () => {
|
describe('Locale message keys consistency', () => {
|
||||||
const locales = [
|
const locales = [
|
||||||
|
{ name: 'de', data: de },
|
||||||
{ name: 'en', data: en },
|
{ name: 'en', data: en },
|
||||||
{ name: 'ja', data: ja },
|
|
||||||
{ name: 'pt-BR', data: ptBR },
|
{ name: 'pt-BR', data: ptBR },
|
||||||
|
{ name: 'zh-CN', data: zhCN },
|
||||||
|
{ name: 'ja', data: ja },
|
||||||
];
|
];
|
||||||
|
|
||||||
const base = locales[0];
|
const base = locales.find((locale) => locale.name === 'en');
|
||||||
|
if (!base) throw new Error('Base locale not found');
|
||||||
const baseKeys = getAllKeys(base.data);
|
const baseKeys = getAllKeys(base.data);
|
||||||
|
|
||||||
for (const locale of locales.slice(1)) {
|
for (const locale of locales.slice(1)) {
|
||||||
|
|||||||
408
frontend/messages/zh-CN.json
Normal file
408
frontend/messages/zh-CN.json
Normal file
@@ -0,0 +1,408 @@
|
|||||||
|
{
|
||||||
|
"RunStatus": {
|
||||||
|
"new": "新建",
|
||||||
|
"inProgress": "进行中",
|
||||||
|
"underReview": "审核中",
|
||||||
|
"rejected": "已拒绝",
|
||||||
|
"done": "完成",
|
||||||
|
"closed": "已关闭"
|
||||||
|
},
|
||||||
|
"RunCaseStatus": {
|
||||||
|
"untested": "未测试",
|
||||||
|
"passed": "通过",
|
||||||
|
"failed": "失败",
|
||||||
|
"retest": "重测",
|
||||||
|
"skipped": "跳过"
|
||||||
|
},
|
||||||
|
"Priority": {
|
||||||
|
"critical": "严重",
|
||||||
|
"high": "高",
|
||||||
|
"medium": "中",
|
||||||
|
"low": "低"
|
||||||
|
},
|
||||||
|
"Type": {
|
||||||
|
"other": "其他",
|
||||||
|
"security": "安全",
|
||||||
|
"performance": "性能",
|
||||||
|
"accessibility": "无障碍",
|
||||||
|
"functional": "功能",
|
||||||
|
"acceptance": "验收",
|
||||||
|
"usability": "易用性",
|
||||||
|
"smoke_sanity": "冒烟与健全性",
|
||||||
|
"compatibility": "兼容性",
|
||||||
|
"destructive": "破坏性",
|
||||||
|
"regression": "回归",
|
||||||
|
"automated": "自动化",
|
||||||
|
"manual": "手动"
|
||||||
|
},
|
||||||
|
"ProjectDialog": {
|
||||||
|
"project": "项目",
|
||||||
|
"project_name": "项目名称",
|
||||||
|
"project_detail": "项目详情",
|
||||||
|
"public": "公开",
|
||||||
|
"private": "私有",
|
||||||
|
"if_you_make_public": "将项目设为公开将使其对非项目成员用户可见。",
|
||||||
|
"close": "关闭",
|
||||||
|
"create": "创建",
|
||||||
|
"update": "更新",
|
||||||
|
"please_enter": "请输入项目名称"
|
||||||
|
},
|
||||||
|
"Index": {
|
||||||
|
"get_started": "开始使用",
|
||||||
|
"demo": "演示",
|
||||||
|
"oss_tcms": "开源测试用例管理系统",
|
||||||
|
"integrate_and_manage": "集成并管理您的所有软件测试。",
|
||||||
|
"oss_title": "开源",
|
||||||
|
"oss_detail": "UnitTCMS 是免费且开源的。应用程序支持自托管,可部署在有严格安全要求的环境中。",
|
||||||
|
"organize_title": "组织测试用例",
|
||||||
|
"organize_detail": "可以通过项目和文件夹来组织测试用例。现代化的 UI 框架使其运行迅速。",
|
||||||
|
"usability_title": "易用性",
|
||||||
|
"usability_detail": "定义好的测试用例可以在测试运行中反复使用。测试运行和项目的状态可以通过图表直观查看。",
|
||||||
|
"universal_title": "通用性",
|
||||||
|
"universal_detail": "多语言支持和深色模式让任何人都可以无障碍地使用该系统。",
|
||||||
|
"project_title": "基于项目",
|
||||||
|
"project_subtitle": "以项目为单位管理测试用例和测试运行。我们的仪表盘提供了每个项目中测试用例类型及其进度的概览。这使您能够实时监控项目状态并进行高效管理。",
|
||||||
|
"case_management_title": "测试用例管理",
|
||||||
|
"case_management_subtitle": "在项目中创建文件夹,利用我们现代化且直观的 UI 轻松定义测试用例。支持附件上传,可对测试用例进行详细说明,便于在整个团队中共享信息。",
|
||||||
|
"run_management_title": "测试运行管理",
|
||||||
|
"run_management_subtitle": "定义好的测试用例可以在测试运行中多次复用,实现高效的测试循环。此外,您还可以可视化地监控测试运行和项目的状态。",
|
||||||
|
"member_management_title": "成员管理",
|
||||||
|
"member_management_subtitle": "通过在项目中添加或移除成员来支持团队开发。您可以为每个成员分配角色并详细设置权限。我们提供三种主要角色:“管理者”管理整个项目,“开发者”设计测试,“报告者”执行测试。"
|
||||||
|
},
|
||||||
|
"Header": {
|
||||||
|
"title": "开源测试用例管理系统",
|
||||||
|
"description": "集成并管理您的所有软件测试",
|
||||||
|
"docs": "文档",
|
||||||
|
"roadmap": "路线图",
|
||||||
|
"projects": "项目",
|
||||||
|
"admin": "管理后台",
|
||||||
|
"account": "账户",
|
||||||
|
"profile_settings": "个人设置",
|
||||||
|
"signup": "注册",
|
||||||
|
"signin": "登录",
|
||||||
|
"signout": "退出",
|
||||||
|
"links": "链接",
|
||||||
|
"languages": "语言"
|
||||||
|
},
|
||||||
|
"Toast": {
|
||||||
|
"need_signed_in": "您需要先登录",
|
||||||
|
"session_expired": "会话已过期"
|
||||||
|
},
|
||||||
|
"Auth": {
|
||||||
|
"account": "账户",
|
||||||
|
"signup": "注册",
|
||||||
|
"signin": "登录",
|
||||||
|
"or_signup": "没有账号?去注册",
|
||||||
|
"or_signin": "已有账号?去登录",
|
||||||
|
"signin_as_guest": "或以访客身份登录",
|
||||||
|
"email": "邮箱",
|
||||||
|
"username": "用户名",
|
||||||
|
"password": "密码",
|
||||||
|
"confirm_password": "确认密码",
|
||||||
|
"invalid_email": "无效的邮箱地址",
|
||||||
|
"invalid_password": "密码必须至少包含 8 个字符",
|
||||||
|
"username_empty": "用户名不能为空",
|
||||||
|
"password_empty": "密码不能为空",
|
||||||
|
"password_not_match": "密码不匹配",
|
||||||
|
"email_already_exist": "邮箱已被注册",
|
||||||
|
"email_not_exist": "未找到该邮箱地址",
|
||||||
|
"signup_error": "注册失败",
|
||||||
|
"signin_error": "登录失败",
|
||||||
|
"demo_page_warning": "这是一个演示环境,您输入的任何数据都将被定期重置。",
|
||||||
|
"your_projects": "您的项目",
|
||||||
|
"public": "公开",
|
||||||
|
"private": "私有",
|
||||||
|
"not_own_any_projects": "您没有任何项目。",
|
||||||
|
"find_projects": "发现项目",
|
||||||
|
"profile_settings": "个人设置",
|
||||||
|
"change_username": "修改用户名",
|
||||||
|
"new_username": "新用户名",
|
||||||
|
"update_username": "更新用户名",
|
||||||
|
"username_updated": "用户名更新成功",
|
||||||
|
"change_password": "修改密码",
|
||||||
|
"current_password": "当前密码",
|
||||||
|
"new_password": "新密码",
|
||||||
|
"confirm_new_password": "确认新密码",
|
||||||
|
"update_password": "更新密码",
|
||||||
|
"password_updated": "密码更新成功",
|
||||||
|
"change_avatar": "修改头像",
|
||||||
|
"upload_avatar": "上传头像",
|
||||||
|
"remove_avatar": "移除头像",
|
||||||
|
"avatar_updated": "头像更新成功",
|
||||||
|
"avatar_removed": "头像移除成功",
|
||||||
|
"max_file_size_5mb": "最大文件大小:5MB",
|
||||||
|
"only_images_allowed": "仅允许上传图片文件",
|
||||||
|
"current_password_incorrect": "当前密码不正确",
|
||||||
|
"update_error": "更新失败"
|
||||||
|
},
|
||||||
|
"Health": {
|
||||||
|
"health_check": "健康检查",
|
||||||
|
"status": "状态",
|
||||||
|
"ok": "正常",
|
||||||
|
"error": "错误",
|
||||||
|
"api_server": "API 服务器",
|
||||||
|
"unittcms_version": "UnitTCMS 版本"
|
||||||
|
},
|
||||||
|
"Admin": {
|
||||||
|
"user_management": "用户管理",
|
||||||
|
"avatar": "头像",
|
||||||
|
"id": "ID",
|
||||||
|
"email": "邮箱",
|
||||||
|
"username": "用户名",
|
||||||
|
"role": "角色",
|
||||||
|
"administrator": "管理员",
|
||||||
|
"user": "用户",
|
||||||
|
"no_users_found": "未找到用户",
|
||||||
|
"quit_admin": "放弃管理员权限",
|
||||||
|
"close": "关闭",
|
||||||
|
"quit": "放弃",
|
||||||
|
"quit_confirm": "如果您放弃管理员权限,您将无法再访问管理页面。",
|
||||||
|
"role_changed": "角色已变更",
|
||||||
|
"lost_admin_auth": "已失去管理员权限",
|
||||||
|
"at_least": "至少需要保留一名管理员",
|
||||||
|
"reset_password": "重置密码",
|
||||||
|
"reset": "重置",
|
||||||
|
"invalid_password": "密码必须至少包含 8 个字符",
|
||||||
|
"password_not_match": "密码不匹配"
|
||||||
|
},
|
||||||
|
"Projects": {
|
||||||
|
"project_list": "项目列表",
|
||||||
|
"new_project": "新建项目",
|
||||||
|
"id": "ID",
|
||||||
|
"publicity": "公开性",
|
||||||
|
"public": "公开",
|
||||||
|
"private": "私有",
|
||||||
|
"name": "名称",
|
||||||
|
"detail": "详情",
|
||||||
|
"last_update": "最后更新",
|
||||||
|
"no_projects_found": "未找到项目"
|
||||||
|
},
|
||||||
|
"Project": {
|
||||||
|
"project": "项目",
|
||||||
|
"toggle_sidebar": "切换侧边栏",
|
||||||
|
"home": "首页",
|
||||||
|
"test_cases": "测试用例",
|
||||||
|
"test_runs": "测试运行",
|
||||||
|
"members": "成员",
|
||||||
|
"settings": "设置"
|
||||||
|
},
|
||||||
|
"Home": {
|
||||||
|
"home": "首页",
|
||||||
|
"Folders": "文件夹",
|
||||||
|
"test_cases": "测试用例",
|
||||||
|
"test_runs": "测试运行",
|
||||||
|
"progress": "进度",
|
||||||
|
"test_classification": "测试分类",
|
||||||
|
"by_type": "按测试类型",
|
||||||
|
"by_priority": "按测试优先级"
|
||||||
|
},
|
||||||
|
"Folders": {
|
||||||
|
"folder": "文件夹",
|
||||||
|
"new_folder": "新建文件夹",
|
||||||
|
"edit_folder": "编辑文件夹",
|
||||||
|
"delete_folder": "删除文件夹",
|
||||||
|
"folder_name": "文件夹名称",
|
||||||
|
"folder_detail": "文件夹详情",
|
||||||
|
"close": "关闭",
|
||||||
|
"create": "创建",
|
||||||
|
"update": "更新",
|
||||||
|
"please_enter": "请输入文件夹名称",
|
||||||
|
"delete": "删除",
|
||||||
|
"are_you_sure": "您确定要删除该文件夹吗?",
|
||||||
|
"no_folders_found": "未找到文件夹"
|
||||||
|
},
|
||||||
|
"Cases": {
|
||||||
|
"test_case_list": "测试用例列表",
|
||||||
|
"id": "ID",
|
||||||
|
"title": "标题",
|
||||||
|
"priority": "优先级",
|
||||||
|
"actions": "操作",
|
||||||
|
"delete_case": "删除测试用例",
|
||||||
|
"delete": "删除",
|
||||||
|
"close": "关闭",
|
||||||
|
"are_you_sure": "您确定要删除测试用例吗?",
|
||||||
|
"new_test_case": "新建",
|
||||||
|
"export": "导出",
|
||||||
|
"status": "状态",
|
||||||
|
"no_cases_found": "未找到测试用例",
|
||||||
|
"case_title": "测试用例标题",
|
||||||
|
"case_description": "测试用例描述",
|
||||||
|
"case_title_or_description": "测试用例标题或描述",
|
||||||
|
"create": "创建",
|
||||||
|
"please_enter": "请输入测试用例标题",
|
||||||
|
"filter": "筛选",
|
||||||
|
"clear_all": "清除所有",
|
||||||
|
"apply": "应用",
|
||||||
|
"select_priorities": "选择优先级",
|
||||||
|
"selected": "已选择",
|
||||||
|
"type": "类型",
|
||||||
|
"select_types": "选择类型",
|
||||||
|
"cases_selected": "个用例已选择",
|
||||||
|
"select_action": "选择操作",
|
||||||
|
"move": "移动",
|
||||||
|
"clone": "克隆",
|
||||||
|
"cases_moved": "测试用例已移动",
|
||||||
|
"cases_cloned": "测试用例已克隆",
|
||||||
|
"tags": "标签",
|
||||||
|
"select_tags": "选择标签",
|
||||||
|
"import": "导入",
|
||||||
|
"import_cases": "导入测试用例",
|
||||||
|
"import_available": "您可以从 Excel 文件 (xlsx, xls) 导入测试用例。导入的 Excel 文件必须遵循指定格式。",
|
||||||
|
"download_template": "下载模板",
|
||||||
|
"click_to_upload": "点击上传",
|
||||||
|
"or_drag_and_drop": " 或拖拽文件到此处",
|
||||||
|
"max_file_size": "最大文件大小",
|
||||||
|
"cases_imported": "测试用例已导入",
|
||||||
|
"create_more": "继续创建"
|
||||||
|
},
|
||||||
|
"Case": {
|
||||||
|
"back_to_cases": "返回测试用例列表",
|
||||||
|
"updating": "更新中...",
|
||||||
|
"update": "更新",
|
||||||
|
"updated_test_case": "测试用例已更新",
|
||||||
|
"basic": "基本信息",
|
||||||
|
"title": "标题",
|
||||||
|
"please_enter_title": "请输入标题",
|
||||||
|
"description": "描述",
|
||||||
|
"test_case_description": "测试用例描述",
|
||||||
|
"priority": "优先级",
|
||||||
|
"type": "类型",
|
||||||
|
"template": "模板",
|
||||||
|
"test_detail": "测试详情",
|
||||||
|
"preconditions": "前置条件",
|
||||||
|
"expected_result": "预期结果",
|
||||||
|
"step": "步骤",
|
||||||
|
"text": "文本",
|
||||||
|
"steps": "步骤",
|
||||||
|
"new_step": "新步骤",
|
||||||
|
"details_of_the_step": "步骤详情",
|
||||||
|
"delete_this_step": "删除此步骤",
|
||||||
|
"insert_step": "插入步骤",
|
||||||
|
"attachments": "附件",
|
||||||
|
"delete": "删除",
|
||||||
|
"download": "下载",
|
||||||
|
"delete_file": "删除文件",
|
||||||
|
"click_to_upload": "点击上传",
|
||||||
|
"or_drag_and_drop": " 或拖拽文件到此处",
|
||||||
|
"max_file_size": "最大文件大小",
|
||||||
|
"are_you_sure_leave": "您确定要离开此页面吗?",
|
||||||
|
"tags": "标签",
|
||||||
|
"create_tag": "创建标签",
|
||||||
|
"max_tags_limit": "最大标签数量限制",
|
||||||
|
"tag_already_exists": "标签已存在",
|
||||||
|
"tag_created_and_added": "标签已创建并添加",
|
||||||
|
"error_creating_tag": "创建标签失败",
|
||||||
|
"error_updating_test_case": "更新测试用例失败",
|
||||||
|
"search_or_create_tag": "搜索或创建标签",
|
||||||
|
"no_tags_selected": "未选择标签"
|
||||||
|
},
|
||||||
|
"Runs": {
|
||||||
|
"run_list": "测试运行列表",
|
||||||
|
"run": "运行",
|
||||||
|
"new_run": "新建运行",
|
||||||
|
"edit_run": "编辑运行",
|
||||||
|
"delete_run": "删除运行",
|
||||||
|
"id": "ID",
|
||||||
|
"name": "名称",
|
||||||
|
"description": "描述",
|
||||||
|
"last_update": "最后更新",
|
||||||
|
"actions": "操作",
|
||||||
|
"run_name": "运行名称",
|
||||||
|
"run_description": "运行描述",
|
||||||
|
"no_runs_found": "未找到测试运行",
|
||||||
|
"close": "关闭",
|
||||||
|
"create": "创建",
|
||||||
|
"update": "更新",
|
||||||
|
"please_enter": "请输入运行名称",
|
||||||
|
"are_you_sure": "您确定要删除该测试运行吗?",
|
||||||
|
"delete": "删除"
|
||||||
|
},
|
||||||
|
"Run": {
|
||||||
|
"back_to_runs": "返回测试运行列表",
|
||||||
|
"updating": "更新中...",
|
||||||
|
"update": "更新",
|
||||||
|
"updated_test_run": "测试运行已更新",
|
||||||
|
"export": "导出",
|
||||||
|
"progress": "进度",
|
||||||
|
"refresh": "刷新",
|
||||||
|
"id": "ID",
|
||||||
|
"title": "标题",
|
||||||
|
"please_enter": "请输入运行名称",
|
||||||
|
"description": "描述",
|
||||||
|
"priority": "优先级",
|
||||||
|
"status": "状态",
|
||||||
|
"actions": "操作",
|
||||||
|
"select_test_case": "选择测试用例",
|
||||||
|
"test_case_selection": "测试用例选择",
|
||||||
|
"include_in_run": "包含在运行中",
|
||||||
|
"exclude_from_run": "从运行中排除",
|
||||||
|
"no_cases_found": "未找到用例",
|
||||||
|
"are_you_sure_leave": "您确定要离开此页面吗?",
|
||||||
|
"type": "类型",
|
||||||
|
"test_detail": "测试详情",
|
||||||
|
"steps": "步骤",
|
||||||
|
"preconditions": "前置条件",
|
||||||
|
"expected_result": "预期结果",
|
||||||
|
"details_of_the_step": "步骤详情",
|
||||||
|
"close": "关闭",
|
||||||
|
"filter": "筛选",
|
||||||
|
"clear_all": "清除所有",
|
||||||
|
"apply": "应用",
|
||||||
|
"select_status": "选择状态",
|
||||||
|
"please_save": "请保存更改",
|
||||||
|
"case_title_or_description": "测试用例标题或描述",
|
||||||
|
"selected": "已选择",
|
||||||
|
"tags": "标签",
|
||||||
|
"select_tags": "选择标签"
|
||||||
|
},
|
||||||
|
"Members": {
|
||||||
|
"member_management": "成员管理",
|
||||||
|
"avatar": "头像",
|
||||||
|
"email": "邮箱",
|
||||||
|
"username": "用户名",
|
||||||
|
"role": "角色",
|
||||||
|
"manager": "管理者",
|
||||||
|
"developer": "开发者",
|
||||||
|
"reporter": "报告者",
|
||||||
|
"delete": "删除",
|
||||||
|
"deleteMember": "删除成员",
|
||||||
|
"no_members_found": "未找到成员",
|
||||||
|
"add_member": "添加成员",
|
||||||
|
"user_name_or_email": "用户名或邮箱",
|
||||||
|
"close": "关闭",
|
||||||
|
"add": "添加",
|
||||||
|
"are_you_sure": "您确定要删除该成员吗?",
|
||||||
|
"member_added": "成员已添加",
|
||||||
|
"role_changed": "成员角色已变更",
|
||||||
|
"member_deleted": "成员已删除"
|
||||||
|
},
|
||||||
|
"Settings": {
|
||||||
|
"project_management": "项目管理",
|
||||||
|
"project_name": "项目名称",
|
||||||
|
"project_detail": "项目详情",
|
||||||
|
"project_owner": "项目所有者",
|
||||||
|
"edit_project": "编辑项目",
|
||||||
|
"publicity": "公开性",
|
||||||
|
"public": "公开",
|
||||||
|
"private": "私有",
|
||||||
|
"delete_project": "删除项目",
|
||||||
|
"delete": "删除",
|
||||||
|
"close": "关闭",
|
||||||
|
"are_you_sure": "您确定要删除该项目吗?",
|
||||||
|
"tag_management": "标签管理",
|
||||||
|
"tag_name": "标签名称",
|
||||||
|
"add_tag": "添加标签",
|
||||||
|
"no_tags_available": "暂无标签",
|
||||||
|
"delete_tag": "删除标签",
|
||||||
|
"are_you_sure_delete_tag": "您确定要删除该标签吗?",
|
||||||
|
"tag_created": "标签创建成功。",
|
||||||
|
"tag_updated": "标签更新成功。",
|
||||||
|
"tag_deleted": "标签删除成功。",
|
||||||
|
"tag_error_empty": "标签名称不能为空。",
|
||||||
|
"tag_error_min_length": "标签名称长度至少为 3 个字符。",
|
||||||
|
"tag_error_max_length": "标签名称不能超过 20 个字符。",
|
||||||
|
"tag_error_create": "标签创建失败,请重试。",
|
||||||
|
"tag_error_update": "标签更新失败,请重试。",
|
||||||
|
"tag_error_delete": "标签删除失败,请重试。"
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -62,7 +62,7 @@ export default function HealthPage({ messages, locale }: Props) {
|
|||||||
<TableBody>
|
<TableBody>
|
||||||
<TableRow key="1">
|
<TableRow key="1">
|
||||||
<TableCell>{messages.unittcms_version}</TableCell>
|
<TableCell>{messages.unittcms_version}</TableCell>
|
||||||
<TableCell>1.0.0-beta.25</TableCell>
|
<TableCell>1.0.0-beta.26</TableCell>
|
||||||
</TableRow>
|
</TableRow>
|
||||||
<TableRow key="2">
|
<TableRow key="2">
|
||||||
<TableCell>{messages.api_server}</TableCell>
|
<TableCell>{messages.api_server}</TableCell>
|
||||||
|
|||||||
@@ -2,7 +2,7 @@ import { createNavigation } from 'next-intl/navigation';
|
|||||||
import { defineRouting } from 'next-intl/routing';
|
import { defineRouting } from 'next-intl/routing';
|
||||||
|
|
||||||
export const routing = defineRouting({
|
export const routing = defineRouting({
|
||||||
locales: ['en', 'ja', 'pt-BR'],
|
locales: ['de', 'en', 'pt-BR', 'zh-CN', 'ja'],
|
||||||
defaultLocale: 'en',
|
defaultLocale: 'en',
|
||||||
localePrefix: {
|
localePrefix: {
|
||||||
mode: 'always',
|
mode: 'always',
|
||||||
|
|||||||
@@ -4,5 +4,5 @@ import { routing } from './i18n/routing';
|
|||||||
export default createMiddleware(routing);
|
export default createMiddleware(routing);
|
||||||
|
|
||||||
export const config = {
|
export const config = {
|
||||||
matcher: ['/', '/(ja|en|pt-BR)/:path*'],
|
matcher: ['/', '/(de|en|pt-BR|zh-CN|ja)/:path*'],
|
||||||
};
|
};
|
||||||
|
|||||||
@@ -1,4 +1,4 @@
|
|||||||
export type LocaleCodeType = 'en' | 'ja' | 'pt-BR';
|
export type LocaleCodeType = 'de' | 'en' | 'pt-BR' | 'zh-CN' | 'ja';
|
||||||
|
|
||||||
export type LocaleType = {
|
export type LocaleType = {
|
||||||
code: LocaleCodeType;
|
code: LocaleCodeType;
|
||||||
|
|||||||
Reference in New Issue
Block a user