feat(10-02): backend strings, controller messages and declarative toolbar
- phrasebook ships the backend::lang admin strings (pl, en) with CLDR plural maps, loads them as namespace backend, applies pact.HasLangOverrides trees (lang/<locale>/<namespace>/<group>.yaml) after every namespace, and fails activation when a backend key cannot convert to plural forms - Translator.Forms, Bundle, Resolved and Has serve keys as CLDR form maps - Public GET /lang returns every backend::lang key for the request locale over the fallback locale, Cache-Control no-cache - config_list, config_form and config_relation accept a strict messages block; omitted keys take framework defaults, schemas serve every message as CLDR forms, and activation fails on a missing phrase key - toolbar.buttons is an ordered [create, delete] list; the Winter string form, duplicates, unknown actions and delete without showCheckboxes fail at boot, and create is dropped when the controller has no form - Form schema serves the raw Winter redirects; scaffold emits the list syntax; form and relation schema routes are typed in the admin OpenAPI
This commit is contained in:
119
phrasebook/backend/lang/en/lang.yaml
Normal file
119
phrasebook/backend/lang/en/lang.yaml
Normal file
@@ -0,0 +1,119 @@
|
||||
# Framework admin strings (D-20), resolved as backend::lang.<group>.<key>.
|
||||
# English equivalents of the Polish copy; plural texts are CLDR maps (one,
|
||||
# other), never pipe strings. Placeholders use :count, :name, :term (D-24).
|
||||
auth:
|
||||
title: Welcome back
|
||||
login: Login or email
|
||||
password: Password
|
||||
invalid: Invalid login details
|
||||
submit: Sign in
|
||||
logout: Sign out
|
||||
session_expired: Your session has expired. Please sign in again.
|
||||
nav:
|
||||
plugins: Plugins
|
||||
sections: Sections
|
||||
breadcrumbs: Breadcrumbs
|
||||
empty: No sections are available.
|
||||
settings: Settings
|
||||
collapse: Collapse menu
|
||||
expand: Expand menu
|
||||
user_menu: User menu
|
||||
page:
|
||||
not_found: Page not found.
|
||||
list:
|
||||
search_prompt: Search…
|
||||
no_records: There are no records in this view.
|
||||
no_results: 0 results
|
||||
loading: Loading…
|
||||
load_failed: The list could not be loaded.
|
||||
delete_selected: Delete selected
|
||||
prev_page: Previous
|
||||
next_page: Next
|
||||
records_per_page: Per page
|
||||
column_switch_true: "Yes"
|
||||
column_switch_false: "No"
|
||||
column_created: Created
|
||||
column_updated: Updated
|
||||
pagination_range: ":from–:to of :total"
|
||||
results:
|
||||
one: ":count result"
|
||||
other: ":count results"
|
||||
empty_value: "—"
|
||||
clear_search: Clear search
|
||||
select_all: Select all on this page
|
||||
select_row: Select row
|
||||
sort_ascending: Sort ascending
|
||||
sort_descending: Sort descending
|
||||
form:
|
||||
save: Save
|
||||
save_and_close: Save and close
|
||||
cancel: Cancel
|
||||
delete: Delete
|
||||
none: — none —
|
||||
update: Edit
|
||||
create: Create
|
||||
return_to_list: Back to list
|
||||
close: Close
|
||||
confirm: Confirm
|
||||
saving: Saving…
|
||||
deleting: Deleting…
|
||||
add: Add
|
||||
remove_item: "Remove: :name"
|
||||
add_item: Add…
|
||||
select_placeholder: Select…
|
||||
loading_options: Loading…
|
||||
no_options: No results
|
||||
unsupported_field: "Unsupported field type: :type"
|
||||
error_title: Could not save.
|
||||
error_fields:
|
||||
one: "Fix :count field marked below."
|
||||
other: "Fix :count fields marked below."
|
||||
error_generic: The changes could not be saved. Please try again.
|
||||
unsaved_confirm: You have unsaved changes. Discard them?
|
||||
tab_errors:
|
||||
one: ":count error"
|
||||
other: ":count errors"
|
||||
relation:
|
||||
add: Add
|
||||
link: Link
|
||||
unlink: Unlink
|
||||
remove: Remove
|
||||
search: Search…
|
||||
add_count: "Add (:count)"
|
||||
candidates_range: ":from–:to of :total"
|
||||
settings:
|
||||
title: Settings
|
||||
empty: No settings are available.
|
||||
saved: Settings saved
|
||||
messages:
|
||||
list:
|
||||
record_count:
|
||||
one: ":count record"
|
||||
other: ":count records"
|
||||
create: New record
|
||||
empty_search: Nothing found
|
||||
empty_search_hint: No record matches “:term”. Try another search.
|
||||
selected: ":count selected"
|
||||
delete_confirm: "Delete the selected (:count)?"
|
||||
deleted:
|
||||
one: "Deleted :count record"
|
||||
other: "Deleted :count records"
|
||||
form:
|
||||
create: New record
|
||||
update: Edit record
|
||||
saved: Saved
|
||||
delete_confirm: Delete this record?
|
||||
deleted: Record deleted
|
||||
relation:
|
||||
link: Add
|
||||
link_hint: Choose the records to link.
|
||||
candidate_search: Search…
|
||||
linked:
|
||||
one: "Linked :count record"
|
||||
other: "Linked :count records"
|
||||
unlink_selected: Unlink selected
|
||||
unlink_confirm: "Unlink the selected (:count)?"
|
||||
unlinked:
|
||||
one: "Unlinked :count record"
|
||||
other: "Unlinked :count records"
|
||||
empty: No linked records.
|
||||
135
phrasebook/backend/lang/pl/lang.yaml
Normal file
135
phrasebook/backend/lang/pl/lang.yaml
Normal file
@@ -0,0 +1,135 @@
|
||||
# Framework admin strings (D-20), resolved as backend::lang.<group>.<key>.
|
||||
# Winter backend key names are kept where Winter has them; values follow the
|
||||
# admin design copy (D-06). Plural texts are CLDR maps (one, few, many,
|
||||
# other), never pipe strings, so every key converts to the SPA's plural forms.
|
||||
# Placeholders use :count, :name, :term and friends (D-24).
|
||||
auth:
|
||||
title: Witaj ponownie
|
||||
login: Login lub e-mail
|
||||
password: Hasło
|
||||
invalid: Nieprawidłowe dane logowania
|
||||
submit: Zaloguj
|
||||
logout: Wyloguj
|
||||
session_expired: Sesja wygasła. Zaloguj się ponownie.
|
||||
nav:
|
||||
plugins: Wtyczki
|
||||
sections: Sekcje
|
||||
breadcrumbs: Ścieżka nawigacji
|
||||
empty: Brak dostępnych sekcji.
|
||||
settings: Ustawienia
|
||||
collapse: Zwiń menu
|
||||
expand: Rozwiń menu
|
||||
user_menu: Menu użytkownika
|
||||
page:
|
||||
not_found: Nie znaleziono strony.
|
||||
list:
|
||||
search_prompt: Szukaj…
|
||||
no_records: Brak rekordów w tym widoku.
|
||||
no_results: 0 wyników
|
||||
loading: Wczytywanie…
|
||||
load_failed: Nie udało się wczytać listy.
|
||||
delete_selected: Usuń zaznaczone
|
||||
prev_page: Poprzednia
|
||||
next_page: Następna
|
||||
records_per_page: Na stronę
|
||||
column_switch_true: Tak
|
||||
column_switch_false: Nie
|
||||
column_created: Utworzono
|
||||
column_updated: Zaktualizowano
|
||||
pagination_range: ":from–:to z :total"
|
||||
results:
|
||||
one: ":count wynik"
|
||||
few: ":count wyniki"
|
||||
many: ":count wyników"
|
||||
other: ":count wyniku"
|
||||
empty_value: "—"
|
||||
clear_search: Wyczyść wyszukiwanie
|
||||
select_all: Zaznacz wszystkie na stronie
|
||||
select_row: Zaznacz wiersz
|
||||
sort_ascending: Sortuj rosnąco
|
||||
sort_descending: Sortuj malejąco
|
||||
form:
|
||||
save: Zapisz
|
||||
save_and_close: Zapisz i zamknij
|
||||
cancel: Anuluj
|
||||
delete: Usuń
|
||||
none: — brak —
|
||||
update: Edytuj
|
||||
create: Utwórz
|
||||
return_to_list: Wróć do listy
|
||||
close: Zamknij
|
||||
confirm: Potwierdź
|
||||
saving: Zapisywanie…
|
||||
deleting: Usuwanie…
|
||||
add: Dodaj
|
||||
remove_item: "Usuń: :name"
|
||||
add_item: Dodaj…
|
||||
select_placeholder: Wybierz…
|
||||
loading_options: Wczytywanie…
|
||||
no_options: Brak wyników
|
||||
unsupported_field: "Nieobsługiwany typ pola: :type"
|
||||
error_title: Nie udało się zapisać.
|
||||
error_fields:
|
||||
one: "Popraw :count pole oznaczone poniżej."
|
||||
few: "Popraw :count pola oznaczone poniżej."
|
||||
many: "Popraw :count pól oznaczonych poniżej."
|
||||
other: "Popraw :count pola oznaczonego poniżej."
|
||||
error_generic: Nie udało się zapisać zmian. Spróbuj ponownie.
|
||||
unsaved_confirm: Masz niezapisane zmiany. Porzucić je?
|
||||
tab_errors:
|
||||
one: ":count błąd"
|
||||
few: ":count błędy"
|
||||
many: ":count błędów"
|
||||
other: ":count błędu"
|
||||
relation:
|
||||
add: Dodaj
|
||||
link: Dołącz
|
||||
unlink: Odłącz
|
||||
remove: Usuń
|
||||
search: Szukaj…
|
||||
add_count: "Dodaj (:count)"
|
||||
candidates_range: ":from–:to z :total"
|
||||
settings:
|
||||
title: Ustawienia
|
||||
empty: Brak dostępnych ustawień.
|
||||
saved: Zapisano ustawienia
|
||||
messages:
|
||||
list:
|
||||
record_count:
|
||||
one: ":count rekord"
|
||||
few: ":count rekordy"
|
||||
many: ":count rekordów"
|
||||
other: ":count rekordu"
|
||||
create: Nowy rekord
|
||||
empty_search: Nic nie znaleziono
|
||||
empty_search_hint: Żaden rekord nie pasuje do frazy „:term”. Spróbuj innej frazy.
|
||||
selected: "Zaznaczono :count"
|
||||
delete_confirm: "Usunąć zaznaczone (:count)?"
|
||||
deleted:
|
||||
one: "Usunięto :count rekord"
|
||||
few: "Usunięto :count rekordy"
|
||||
many: "Usunięto :count rekordów"
|
||||
other: "Usunięto :count rekordu"
|
||||
form:
|
||||
create: Nowy rekord
|
||||
update: Edycja rekordu
|
||||
saved: Zapisano
|
||||
delete_confirm: Usunąć ten rekord?
|
||||
deleted: Usunięto rekord
|
||||
relation:
|
||||
link: Dodaj
|
||||
link_hint: Wybierz rekordy, które chcesz dołączyć.
|
||||
candidate_search: Szukaj…
|
||||
linked:
|
||||
one: "Dołączono :count rekord"
|
||||
few: "Dołączono :count rekordy"
|
||||
many: "Dołączono :count rekordów"
|
||||
other: "Dołączono :count rekordu"
|
||||
unlink_selected: Odłącz zaznaczone
|
||||
unlink_confirm: "Odłączyć zaznaczone (:count)?"
|
||||
unlinked:
|
||||
one: "Odłączono :count rekord"
|
||||
few: "Odłączono :count rekordy"
|
||||
many: "Odłączono :count rekordów"
|
||||
other: "Odłączono :count rekordu"
|
||||
empty: Brak powiązanych rekordów.
|
||||
Reference in New Issue
Block a user