diff --git a/api/user_setting.go b/api/user_setting.go index cd02e077..99a4102c 100644 --- a/api/user_setting.go +++ b/api/user_setting.go @@ -34,7 +34,7 @@ func (key UserSettingKey) String() string { } var ( - UserSettingLocaleValue = []string{"en", "zh", "vi", "fr"} + UserSettingLocaleValue = []string{"en", "zh", "vi", "fr", "sv"} UserSettingAppearanceValue = []string{"light", "dark"} UserSettingMemoVisibilityValue = []Visibility{Private, Protected, Public} UserSettingMemoDisplayTsOptionKeyValue = []string{"created_ts", "updated_ts"} diff --git a/web/src/components/Settings/PreferencesSection.tsx b/web/src/components/Settings/PreferencesSection.tsx index fa2cace5..6bb491c3 100644 --- a/web/src/components/Settings/PreferencesSection.tsx +++ b/web/src/components/Settings/PreferencesSection.tsx @@ -24,6 +24,10 @@ const localeSelectorItems = [ text: "French", value: "fr", }, + { + text: "Svenska", + value: "sv", + }, ]; const PreferencesSection = () => { diff --git a/web/src/i18n.ts b/web/src/i18n.ts index 65eb561c..b4b2c108 100644 --- a/web/src/i18n.ts +++ b/web/src/i18n.ts @@ -4,6 +4,7 @@ import enLocale from "./locales/en.json"; import zhLocale from "./locales/zh.json"; import viLocale from "./locales/vi.json"; import frLocale from "./locales/fr.json"; +import svLocale from "./locales/sv.json"; i18n.use(initReactI18next).init({ resources: { @@ -19,6 +20,9 @@ i18n.use(initReactI18next).init({ fr: { translation: frLocale, }, + sv: { + translation: svLocale, + }, }, lng: "en", fallbackLng: "en", diff --git a/web/src/locales/sv.json b/web/src/locales/sv.json new file mode 100644 index 00000000..3bbc94f9 --- /dev/null +++ b/web/src/locales/sv.json @@ -0,0 +1,213 @@ +{ + "common": { + "about": "Om", + "email": "E-post", + "password": "Lösenord", + "repeat-password-short": "Upprepa", + "repeat-password": "Uprepa lösenordet", + "new-password": "Nytt lösenord", + "repeat-new-password": "Upprepa det nya lösenordet", + "username": "Användarnamn", + "nickname": "Smeknamn", + "save": "Spara", + "close": "Stäng", + "cancel": "Avbryt", + "create": "Skapa", + "change": "Ändra", + "confirm": "Bekräfta", + "reset": "Återställ", + "language": "Språk", + "version": "Version", + "pin": "Fäst", + "unpin": "Ta bort fäst", + "edit": "Redigera", + "restore": "Återställ", + "delete": "Radera", + "null": "Null", + "share": "Dela", + "archive": "Arkivera", + "basic": "Grundläggande", + "admin": "Admin", + "explore": "Utforska", + "sign-in": "Logga in", + "sign-up": "Bli medlem", + "sign-out": "Logga ut", + "back-to-home": "Tillbaka hem", + "type": "Typ", + "shortcuts": "Genvägar", + "title": "Titel", + "filter": "Filter", + "tags": "Taggar", + "yourself": "Själv", + "archived-at": "Arkiverad på", + "changed": "Ändrad", + "update-on": "Uppdatering på", + "fold": "Vik ihop", + "expand": "Expandera", + "image": "Bild", + "link": "Länk" + }, + "slogan": "En öppen källkod, self-hosted antecknings hubb med kunskapshantering och socialisering", + "auth": { + "signup-as-host": "Registera dig som värd", + "host-tip": "Du registerar dig som webbplatsvärd.", + "not-host-tip": "Om du inte har ett konto, kontakta webbplatsens värd." + }, + "sidebar": { + "daily-review": "Daglig återblick", + "resources": "Resurser", + "setting": "Inställningar", + "archived": "Arkiverade" + }, + "daily-review": { + "oops-nothing": "Oj, det finns inget här." + }, + "resources": { + "description": "Visa dina statiska resurser i anteckningarn. t.ex bilder.", + "no-resources": "Inga resurser.", + "fetching-data": "hämtar data...", + "upload": "Ladda upp", + "preview": "Förhandsvisa", + "copy-link": "Kopiera länk", + "delete-resource": "Ta bort resurs", + "warning-text": "Är du säker på att du vill ta bort den här resursen? DENNA ÅTGÄRD ÄR OÅTERSTÄLLBAR❗", + "linked-amount": "Länkat antecknings belopp", + "rename": "Döp om", + "clear-unused-resources": "Rensa outnytjade resurser", + "warning-text-unused": "Är du säker på att du vill ta bort dessa oanvända resurser? DENNA ÅTGÄRD ÄR OÅTERSTÄLLBAR❗", + "no-unused-resources": "Inga oanvända resurser" + }, + "archived": { + "archived-memos": "Arkiverade anteckningar", + "no-archived-memos": "Inga arkiverade anteckningar.", + "fetching-data": "hämtar data..." + }, + "editor": { + "editing": "Redigerar...", + "cancel-edit": "Avbryt redigering", + "save": "Spara", + "placeholder": "Några tankar...", + "only-image-supported": "Endast bildfiler stöds.", + "cant-empty": "Innehållet får inte vara tomt", + "local": "Lokal", + "resources": "Resurser" + }, + "memo": { + "view-detail": "Visa detaljer", + "copy": "Kopiera", + "visibility": { + "private": "Endast synlig för dig", + "protected": "Synlig för medlemmar", + "public": "Synlig för alla" + } + }, + "memo-list": { + "fetching-data": "hämtar data...", + "fetch-more": "Klicka här för att hämta mer" + }, + "shortcut-list": { + "shortcut-title": "Genvägs titel", + "create-shortcut": "Skapa genväg", + "edit-shortcut": "Ändra genväg", + "eligible-memo": "kvalificerad anteckning", + "fill-previous": "Vänligen fyll i tidigare filtervärde", + "title-required": "Titel krävs", + "value-required": "Filtervärde krävs" + }, + "filter": { + "new-filter": "Nytt filter", + "operator": { + "contains": "Innehåller", + "not-contains": "Innehåller inte", + "is": "Är", + "is-not": "Är inte", + "before": "Innan", + "after": "Efter" + }, + "value": { + "not-tagged": "Inga taggar", + "linked": "Har länkar" + }, + "text-placeholder": "Börjar med ^ för att använda regex" + }, + "tag-list": { + "tip-text": "Ange `#tag ` för att skapa" + }, + "search": { + "quickly-filter": "Filtrera snabbt" + }, + "setting": { + "my-account": "Mitt konto", + "preference": "Preferens", + "member": "Medlem", + "member-list": "Medlemslista", + "system": "System", + "account-section": { + "title": "Kontoinformation", + "update-information": "Uppdatera informationen", + "change-password": "Ändra lösenord" + }, + "preference-section": { + "default-memo-visibility": "Standard synlighet för anteckningar", + "enable-folding-memo": "Aktivera vikbara anteckningar", + "editor-font-style": "Redigerare teckensnitt", + "mobile-editor-style": "Mobilredigerade stil", + "default-memo-sort-option": "Anteckning visningstid", + "created_ts": "Skapade tid", + "updated_ts": "Upodaterad tid" + }, + "member-section": { + "create-a-member": "Skapa en medlem" + }, + "system-section": { + "database-file-size": "Databas filstorlek", + "allow-user-signup": "Tillåt användarregistrering", + "additional-style": "Ytterligare stil", + "additional-script": "Ytterligare skript", + "additional-style-placeholder": "Ytterligare CSS kod", + "additional-script-placeholder": "Ytterligare JavaScript kod" + }, + "apperance-option": { + "light": "Alltid ljus", + "dark": "Alltid mörk", + "system": "Följ systeminställningarna" + } + }, + "amount-text": { + "memo": "ANTECKNING", + "tag": "TAGG", + "day": "DAG" + }, + "message": { + "no-memos": "inga anteckningar 🌃", + "memos-ready": "alla anteckningar är redo 🎉", + "restored-successfully": "Återställdes framgångsrikt", + "memo-updated-datetime": "Anteckning skapad datum och tid ändrad", + "invalid-created-datetime": "Ogiltig skapad datumtid.", + "change-memo-created-time": "Ändra anteckning skapade tid", + "memo-not-found": "Anteckning hittades inte.", + "fill-all": "Var god fyll i alla fält.", + "password-not-match": "Lösenorden matchar inte.", + "new-password-not-match": "Nya lösenord matchar inte.", + "image-load-failed": "Bildladdning misslyckades", + "fill-form": "Vänligen fyll i detta formulär", + "login-failed": "Inloggningen misslyckades", + "signup-failed": "Registrering misslyckades", + "user-not-found": "Användaren hittades inte", + "password-changed": "Lösenord ändrat", + "private-only": "Denna anteckning är privat.", + "copied": "Kopierad", + "succeed-copy-content": "Innehållet kopierat till urklipp.", + "succeed-copy-link": "Länk kopioerat till urklipp.", + "change-resource-filename": "Ändra resursfilnamn", + "resource-filename-updated": "Resursfilnamn ändrat.", + "invalid-resource-filename": "Ogiltligt filnamn.", + "click-to-save-the-image": "Klicka för att spara bilden", + "generating-the-screenshot": "Genererar skärmdumpen...", + "count-selected-resources": "Totalt valt", + "too-short": "För kort", + "too-long": "För långt", + "not-allow-space": "Tillåt inte mellanslag", + "not-allow-chinese": "Tillåt inte kinesiska" + } +} \ No newline at end of file diff --git a/web/src/pages/Auth.tsx b/web/src/pages/Auth.tsx index 5eb5cf10..03c817d2 100644 --- a/web/src/pages/Auth.tsx +++ b/web/src/pages/Auth.tsx @@ -176,6 +176,7 @@ const Auth = () => { <Option value="zh">中文</Option> <Option value="vi">Tiếng Việt</Option> <Option value="fr">French</Option> + <Option value="sv">Svenska</Option> </Select> <AppearanceSelect /> </div> diff --git a/web/src/types/i18n.d.ts b/web/src/types/i18n.d.ts index 97fe73f5..ef1b5c07 100644 --- a/web/src/types/i18n.d.ts +++ b/web/src/types/i18n.d.ts @@ -1 +1 @@ -type Locale = "en" | "zh" | "vi" | "fr"; +type Locale = "en" | "zh" | "vi" | "fr" | "sv";