Localization - First Pass (#2174)

* Started designing the backend localization service

* Worked in Transloco for initial PoC

* Worked in Transloco for initial PoC

* Translated the login screen

* translated dashboard screen

* Started work on the backend

* Fixed a logic bug

* translated edit-user screen

* Hooked up the backend for having a locale property.

* Hooked up the ability to view the available locales and switch to them.

* Made the localization service languages be derived from what's in langs/ directory.

* Fixed up localization switching

* Switched when we check for a license on UI bootstrap

* Tweaked some code

* Fixed the bug where dashboard wasn't loading and made it so language switching is working.

* Fixed a bug on dashboard with languagePath

* Converted user-scrobble-history.component.html

* Converted spoiler.component.html

* Converted review-series-modal.component.html

* Converted review-card-modal.component.html

* Updated the readme

* Translated using Weblate (English)

Currently translated at 100.0% (54 of 54 strings)

Translation: Kavita/ui
Translate-URL: https://hosted.weblate.org/projects/kavita/ui/en/

* Converted review-card.component.html

* Deleted dead component

* Converted want-to-read.component.html

* Added translation using Weblate (Korean)

* Translated using Weblate (Spanish)

Currently translated at 40.7% (22 of 54 strings)

Translation: Kavita/ui
Translate-URL: https://hosted.weblate.org/projects/kavita/ui/es/

* Translated using Weblate (Korean)

Currently translated at 62.9% (34 of 54 strings)

Translation: Kavita/ui
Translate-URL: https://hosted.weblate.org/projects/kavita/ui/ko/

* Converted user-preferences.component.html

* Translated using Weblate (Korean)

Currently translated at 92.5% (50 of 54 strings)

Translation: Kavita/ui
Translate-URL: https://hosted.weblate.org/projects/kavita/ui/ko/

* Converted user-holds.component.html

* Converted theme-manager.component.html

* Converted restriction-selector.component.html

* Converted manage-devices.component.html

* Converted edit-device.component.html

* Converted change-password.component.html

* Converted change-email.component.html

* Converted change-age-restriction.component.html

* Converted api-key.component.html

* Converted anilist-key.component.html

* Converted typeahead.component.html

* Converted user-stats-info-cards.component.html

* Converted user-stats.component.html

* Converted top-readers.component.html

* Converted some pipes and ensure translation is loaded before the app.

* Finished all but one pipe for localization

* Converted directory-picker.component.html

* Converted library-access-modal.component.html

* Converted a few components

* Converted a few components

* Converted a few components

* Converted a few components

* Converted a few components

* Merged weblate in

* ... -> … update

* Updated the readme

* Updateded all fonts to be woff2

* Cleaned up some strings to increase re-use

* Removed an old flow (that doesn't exist in backend any longer) from when we introduced emails on Kavita.

* Converted Series detail

* Lots more converted

* Lots more converted & hooked up the ability to flatten during prod build the language files.

* Lots more converted

* Lots more converted & fixed a bunch of broken pipes due to inject()

* Lots more converted

* Lots more converted

* Lots more converted & fixed some bad keys

* Lots more converted

* Fixed some bugs with admin dasbhoard nested tabs not rendering on first load due to not using onpush change detection

* Fixed up some localization errors and fixed forgot password error when the user doesn't have change password permission

* Fixed a stupid build issue again

* Started adding errors for interceptor and backend.

* Finished off manga-reader

* More translations

* Few fixes

* Fixed a bug where character tag badges weren't showing the name on chapter info

* All components are translated

* All toasts are translated

* All confirm/alerts are translated

* Trying something new for the backend

* Migrated the localization strings for the backend into a new file.

* Updated the localization service to be able to do backend localization with fallback to english.

* Cleaned up some external reviews code to reduce looping

* Localized AccountController.cs

* 60% done with controllers

* All controllers are done

* All KavitaExceptions are covered

* Some shakeout fixes

* Prep for initial merge

* Everything is done except options and basic shakeout proves response times are good. Unit tests are broken.

* Fixed up the unit tests

* All unit tests are now working

* Removed some quantifier

* I'm not sure I can support localization for some Volume/Chapter/Book strings within the codebase.

---------

Co-authored-by: Robbie Davis <robbie@therobbiedavis.com>
Co-authored-by: majora2007 <kavitareader@gmail.com>
Co-authored-by: expertjun <jtrobin@naver.com>
Co-authored-by: ThePromidius <thepromidiusyt@gmail.com>
This commit is contained in:
Joe Milazzo 2023-08-03 10:33:51 -05:00 committed by GitHub
parent 670bf82c38
commit 3b23d63234
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
389 changed files with 13652 additions and 7925 deletions

File diff suppressed because it is too large Load diff

View file

@ -0,0 +1,34 @@
{
"login": {
"title": "Acceso",
"username": "Usuario",
"password": "Contraseña",
"password-validation": "La contraseña tiene que tener entre {{min}} y{{max}} caracteres",
"forgot-password": "Has olvidado la contraseña?",
"submit": "Enviar"
},
"dashboard": {
"no-libraries": "No existen librerías configuradas. Configura algunas en",
"server-settings-link": "Ajustes del servidor",
"not-granted": "No has sido autorizado para ver ninguna librería.",
"on-deck-title": "On Deck",
"recently-updated-title": "Recently Updated Series",
"recently-added-title": "Newly Added Series"
},
"edit-user": {
"edit": "Editar",
"username": "Nombre de Usuario",
"not-valid-email": "El correo electronico tiene que ser válido",
"saving": "Guardando …",
"update": "Actualizar",
"required": "Este campo es obligatorio"
},
"user-scrobble-history": {
"data-header": "Datos",
"not-applicable": "No aplicable",
"filter-label": "Filtro",
"type-header": "Tipo",
"rating": "Puntuación {{r}}",
"no-data": "No hay datos"
}
}

View file

@ -0,0 +1,70 @@
{
"login": {
"title": "로그인",
"username": "아이디",
"password": "비밀번호",
"submit": "로그인",
"password-validation": "비밀번호는 길이는{{min}}에서 {{max}}자 사이여야 합니다",
"forgot-password": "비밀번호를 잊으셨나요?"
},
"dashboard": {
"no-libraries": "라이브러리가 아직 설정되지 않았습니다. 구성하기",
"server-settings-link": "서버 설정",
"recently-updated-title": "최근에 업데이트된 시리즈",
"recently-added-title": "새롭게 추가된 시리즈",
"not-granted": "라이브러리에 대한 접근 권한이 없습니다."
},
"edit-user": {
"edit": "수정",
"username": "사용자",
"required": "필수 항목입니다",
"not-valid-email": "유효한 메일 주소여야 합니다",
"update": "업데이트",
"email": "이메일",
"saving": "저장중…"
},
"user-scrobble-history": {
"filter-label": "필터",
"type-header": "유형",
"series-header": "시리즈",
"created-header": "생성됨",
"last-modified-header": "마지막으로 수정한 날짜",
"no-data": "데이터 없음",
"volume-and-chapter-num": "볼륨 {{v}} 챕터 {{n}}",
"rating": "평점 {{r}}",
"not-applicable": "해당 사항 없음",
"processed": "처리됨",
"not-processed": "처리되지 않음",
"description": "여기에 계정과 연결된 모든 scrobble 데이터베이스가 있습니다. 이벤트가 존재하려면 활성 상태가 있어야 합니다\n scrobble 공급자가 구성되었습니다. 처리된 모든 이벤트는 한 달 후에 지워집니다. 만약 처리되지 않은 이벤트가 있다면, 그것은 삭제됩니다\n 이들은 업스트림에서 일치하는 항목을 형성할 수 없습니다. 관리자에게 연락하여 수정하십시오.",
"data-header": "데이터",
"is-processed-header": "처리됨"
},
"scrobble-event-type-pipe": {
"chapter-read": "읽기 진행률",
"score-updated": "평점 업데이트",
"want-to-read-add": "읽고 싶어요: 추가",
"want-to-read-remove": "읽고 싶어요: 제거",
"review": "후기 업데이트"
},
"spoiler": {
"click-to-show": "스포일러, 표시하려면 클릭"
},
"review-series-modal": {
"title": "후기 수정",
"tagline-label": "제목",
"review-label": "평가",
"close": "{{common.close}}",
"save": "{{common.save}}"
},
"review-card-modal": {
"close": "{{common.close}}",
"user-review": "{{username}}님의 리뷰",
"external-mod": "(external)",
"go-to-review": "리뷰로 이동"
},
"common": {
"close": "닫기",
"cancel": "취소",
"save": "저장"
}
}