diff --git a/docs/content/doc/development/translation-instructions-german.md b/docs/content/doc/development/translation-instructions-german.md new file mode 100644 index 0000000000..0a347cd894 --- /dev/null +++ b/docs/content/doc/development/translation-instructions-german.md @@ -0,0 +1,53 @@ +--- +title: "German Translation Instructions" +date: 2021-06-23T23:47:34+02:00 +draft: false +--- + +# German Translation Instructions + +
+NOTE: This document contains translation instructions specific to the german translation of Vikunja. +For instructions applicable to all languages, check out the }}">general translation instructions. +
+ +{{< table_of_contents >}} + +## Allgemein + +Anrede: Wenig förmlich: + +* “Du”-Form +* Keine “Amtsdeusch“-Umschreibungen, einfach so als ob man den Nutzer direkt persönlich ansprechen würde + +Genauer definiert: + +* “falsch” anstatt “nicht korrekt/inkorrekt” +* “Wende dich an …” anstatt “kontaktiere …” +* In derselben Zeit übersetzen (sonst wird aus dem englischen “is“ das deutsche “war”) +* Richtige Anführungszeichen verwenden. Also „“ statt '' oder ' oder ` oder ´ + * `„` für beginnende Anführungszeichen, `“` für schließende Anführungszeichen + +Es gelten Artikel und Worttrennungen aus dem [Duden](https://duden.de). + +## Gendern + +Wo möglich, sollte eine geschlechtsneutrale Anrede verwendet werden. +Falls diese sehr umständlich würden (siehe oben „Amtsdeutsch-Umschreibungen“), soll mit *Doppelpunkt* gegendert werden. + +Beispiel: „Benutzer:in“ + +## Formulierungen in Modals und Buttons + +Es sollten die gleichen Formulierungen auf Buttons und Modals verwendet werden. + +Beispiel: Wenn der Button mit `löschen` beschriftet ist, sollte im Modal die Frage lauten `Willst du das wirklich löschen?` und nicht `Willst du das wirklich entfernen?`. +Gleiches gilt für Erfolgs/Fehlermeldungen nach der Aktion. + +## Trennungen + +* E-Mail-Adresse (siehe Duden) + +## Weiterführende Links + +* http://docs.translatehouse.org/projects/localization-guide/en/latest/guide/translation_guidelines_german.html diff --git a/docs/content/doc/development/translations.md b/docs/content/doc/development/translations.md new file mode 100644 index 0000000000..36cf0a4e27 --- /dev/null +++ b/docs/content/doc/development/translations.md @@ -0,0 +1,54 @@ +--- +title: "Translations" +date: 2021-06-23T22:52:06+02:00 +draft: false +menu: + sidebar: + parent: "development" +--- + +# Translations + +This document provides documentation about how to translate Vikunja. + +{{< table_of_contents >}} + +## Where to translate + +Translation happen at [weblate](https://hosted.weblate.org/projects/vikunja/frontend/). + +Currently, only the frontend (and by extension, the desktop app) is translatable. + +## Translation Instructions + +> These are the instructions for translating Vikunja in another language. +> For information about how to add new translation strings, see below. + +For all languages these translation guidelines should be applied when translating: + +* Use a less-formal style, as if you were talking to a friend. +* If the source string contains characters like `&` or `…`, the translated string should contain them as well. + +More specific instructions for some languages can be found below. + +### Wrong translation strings + +If you encounter a wrong original translation string while translating, please don't correct it in the translation. +Instead, translate it to reflect the original meaning in the translated string but add a comment under the source string to discuss potential changes. + +### Language-specific instructions + +* [German]({{< ref "./translation-instructions-german.md">}}) + +## How to add new translation strings + +All translation strings are stored in `src/i18n/lang/`. +New strings should be added only in the `en.json` file. +Strings in other languages will be synced through weblate and should not be added directly as a PR/commit in the frontend repo. + +## Requesting a new language + +If you want to start translating Vikunja in a language not yet available in Vikunja, please request the language through the weblate interface. +If you have issues with this or need a discussion before doing so, pleace [contact us](https://vikunja.io/contact/) or [start a discussion in the forum](https://community.vikunja.io). + +Once at least 50% of all translation strings are translated and approved, they will be added and distributed with the Vikunja frontend for users to select and use Vikunja with them. diff --git a/docs/content/doc/setup/docker-start-to-finish.md b/docs/content/doc/setup/docker-start-to-finish.md index d56049db1f..4e19204464 100644 --- a/docs/content/doc/setup/docker-start-to-finish.md +++ b/docs/content/doc/setup/docker-start-to-finish.md @@ -36,6 +36,8 @@ services: command: --character-set-server=utf8mb4 --collation-server=utf8mb4_unicode_ci environment: MYSQL_ROOT_PASSWORD: supersecret + MYSQL_USER: vikunja + MYSQL_PASSWORD: secret MYSQL_DATABASE: vikunja volumes: - ./db:/var/lib/mysql @@ -44,9 +46,9 @@ services: image: vikunja/api environment: VIKUNJA_DATABASE_HOST: db - VIKUNJA_DATABASE_PASSWORD: supersecret + VIKUNJA_DATABASE_PASSWORD: secret VIKUNJA_DATABASE_TYPE: mysql - VIKUNJA_DATABASE_USER: root + VIKUNJA_DATABASE_USER: vikunja VIKUNJA_DATABASE_DATABASE: vikunja volumes: - ./files:/app/vikunja/files diff --git a/docs/content/doc/setup/full-docker-example.md b/docs/content/doc/setup/full-docker-example.md index 9e67c321f1..c043c0cce2 100644 --- a/docs/content/doc/setup/full-docker-example.md +++ b/docs/content/doc/setup/full-docker-example.md @@ -203,7 +203,9 @@ services: command: --character-set-server=utf8mb4 --collation-server=utf8mb4_unicode_ci environment: MYSQL_ROOT_PASSWORD: supersecret - MYSQL_DATABASE: vikunja + MYSQL_USER: vikunja + MYSQL_PASSWORD: secret + MYSQL_DATABASE: vikunja volumes: - ./db:/var/lib/mysql restart: unless-stopped @@ -211,9 +213,9 @@ services: image: vikunja/api environment: VIKUNJA_DATABASE_HOST: db - VIKUNJA_DATABASE_PASSWORD: supersecret + VIKUNJA_DATABASE_PASSWORD: secret VIKUNJA_DATABASE_TYPE: mysql - VIKUNJA_DATABASE_USER: root + VIKUNJA_DATABASE_USER: vikunja VIKUNJA_DATABASE_DATABASE: vikunja volumes: - ./files:/app/vikunja/files @@ -259,7 +261,9 @@ services: command: --character-set-server=utf8mb4 --collation-server=utf8mb4_unicode_ci environment: MYSQL_ROOT_PASSWORD: supersecret - MYSQL_DATABASE: vikunja + MYSQL_USER: vikunja + MYSQL_PASSWORD: secret + MYSQL_DATABASE: vikunja volumes: - ./db:/var/lib/mysql restart: unless-stopped @@ -267,9 +271,9 @@ services: image: vikunja/api environment: VIKUNJA_DATABASE_HOST: db - VIKUNJA_DATABASE_PASSWORD: supersecret + VIKUNJA_DATABASE_PASSWORD: secret VIKUNJA_DATABASE_TYPE: mysql - VIKUNJA_DATABASE_USER: root + VIKUNJA_DATABASE_USER: vikunja VIKUNJA_DATABASE_DATABASE: vikunja volumes: - ./files:/app/vikunja/files diff --git a/docs/content/doc/setup/install-backend.md b/docs/content/doc/setup/install-backend.md index 31c1df9ed6..db6a85a649 100644 --- a/docs/content/doc/setup/install-backend.md +++ b/docs/content/doc/setup/install-backend.md @@ -147,9 +147,9 @@ services: image: vikunja/api:latest environment: VIKUNJA_DATABASE_HOST: db - VIKUNJA_DATABASE_PASSWORD: supersecret + VIKUNJA_DATABASE_PASSWORD: secret VIKUNJA_DATABASE_TYPE: mysql - VIKUNJA_DATABASE_USER: root + VIKUNJA_DATABASE_USER: vikunja VIKUNJA_SERVICE_JWTSECRET: volumes: - ./files:/app/vikunja/files @@ -158,6 +158,8 @@ services: command: --character-set-server=utf8mb4 --collation-server=utf8mb4_unicode_ci environment: MYSQL_ROOT_PASSWORD: supersecret + MYSQL_USER: vikunja + MYSQL_PASSWORD: secret MYSQL_DATABASE: vikunja volumes: - ./db:/var/lib/mysql diff --git a/go.mod b/go.mod index 3316e8a5b6..5074e4917d 100644 --- a/go.mod +++ b/go.mod @@ -60,15 +60,15 @@ require ( github.com/spf13/cast v1.3.1 // indirect github.com/spf13/cobra v1.1.3 github.com/spf13/jwalterweatherman v1.1.0 // indirect - github.com/spf13/viper v1.8.0 + github.com/spf13/viper v1.8.1 github.com/stretchr/testify v1.7.0 github.com/swaggo/swag v1.7.0 github.com/ulule/limiter/v3 v3.8.0 - github.com/yuin/goldmark v1.3.8 + github.com/yuin/goldmark v1.3.9 golang.org/x/crypto v0.0.0-20210616213533-5ff15b29337e - golang.org/x/image v0.0.0-20210607152325-775e3b0c77b9 + golang.org/x/image v0.0.0-20210628002857-a66eb6448b8d golang.org/x/net v0.0.0-20210520170846-37e1c6afe023 // indirect - golang.org/x/oauth2 v0.0.0-20210615190721-d04028783cf1 + golang.org/x/oauth2 v0.0.0-20210622215436-a8dc77f794b6 golang.org/x/sync v0.0.0-20210220032951-036812b2e83c golang.org/x/term v0.0.0-20210615171337-6886f2dfbf5b gopkg.in/alexcesaro/quotedprintable.v3 v3.0.0-20150716171945-2caba252f4dc // indirect diff --git a/go.sum b/go.sum index 4931a59190..ab6fc2d6b3 100644 --- a/go.sum +++ b/go.sum @@ -657,6 +657,8 @@ github.com/spf13/viper v1.7.1 h1:pM5oEahlgWv/WnHXpgbKz7iLIxRf65tye2Ci+XFK5sk= github.com/spf13/viper v1.7.1/go.mod h1:8WkrPz2fc9jxqZNCJI/76HCieCp4Q8HaLFoCha5qpdg= github.com/spf13/viper v1.8.0 h1:QRwDgoG8xX+kp69di68D+YYTCWfYEckbZRfUlEIAal0= github.com/spf13/viper v1.8.0/go.mod h1:o0Pch8wJ9BVSWGQMbra6iw0oQ5oktSIBaujf1rJH9Ns= +github.com/spf13/viper v1.8.1 h1:Kq1fyeebqsBfbjZj4EL7gj2IO0mMaiyjYUWcUsl2O44= +github.com/spf13/viper v1.8.1/go.mod h1:o0Pch8wJ9BVSWGQMbra6iw0oQ5oktSIBaujf1rJH9Ns= github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME= github.com/stretchr/objx v0.1.1/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME= github.com/stretchr/objx v0.2.0/go.mod h1:qt09Ya8vawLte6SNmTgCsAVtYtaKzEcn8ATUoHMkEqE= @@ -711,6 +713,8 @@ github.com/yuin/goldmark v1.3.7 h1:NSaHgaeJFCtWXCBkBKXw0rhgMuJ0VoE9FB5mWldcrQ4= github.com/yuin/goldmark v1.3.7/go.mod h1:mwnBkeHKe2W/ZEtQ+71ViKU8L12m81fl3OWwC1Zlc8k= github.com/yuin/goldmark v1.3.8 h1:Nw158Q8QN+CPgTmVRByhVwapp8Mm1e2blinhmx4wx5E= github.com/yuin/goldmark v1.3.8/go.mod h1:mwnBkeHKe2W/ZEtQ+71ViKU8L12m81fl3OWwC1Zlc8k= +github.com/yuin/goldmark v1.3.9 h1:XsVHmzm4P6g84IBbAj+WYMF/IEZ3J9+3I1wlqCNa/SQ= +github.com/yuin/goldmark v1.3.9/go.mod h1:mwnBkeHKe2W/ZEtQ+71ViKU8L12m81fl3OWwC1Zlc8k= github.com/zenazn/goji v0.9.0/go.mod h1:7S9M489iMyHBNxwZnk9/EHS098H4/F6TATF2mIxtB1Q= github.com/ziutek/mymysql v1.5.4/go.mod h1:LMSpPZ6DbqWFxNCHW77HeMg9I646SAhApZ/wKdgO/C0= go.etcd.io/bbolt v1.3.2/go.mod h1:IbVyRI1SCnLcuJnV2u8VeU0CEYM7e686BmAb1XKL+uU= @@ -779,6 +783,10 @@ golang.org/x/image v0.0.0-20190802002840-cff245a6509b/go.mod h1:FeLwcggjj3mMvU+o golang.org/x/image v0.0.0-20191009234506-e7c1f5e7dbb8/go.mod h1:FeLwcggjj3mMvU+oOTbSwawSJRM1uh48EjtB4UJZlP0= golang.org/x/image v0.0.0-20210607152325-775e3b0c77b9 h1:D0iM1dTCbD5Dg1CbuvLC/v/agLc79efSj/L35Q3Vqhs= golang.org/x/image v0.0.0-20210607152325-775e3b0c77b9/go.mod h1:023OzeP/+EPmXeapQh35lcL3II3LrY8Ic+EFFKVhULM= +golang.org/x/image v0.0.0-20210622092929-e6eecd499c2c h1:FRR4fGZm/CMwZka5baQ4z8c8StbxJOMjS/45e0BAxK0= +golang.org/x/image v0.0.0-20210622092929-e6eecd499c2c/go.mod h1:023OzeP/+EPmXeapQh35lcL3II3LrY8Ic+EFFKVhULM= +golang.org/x/image v0.0.0-20210628002857-a66eb6448b8d h1:RNPAfi2nHY7C2srAV8A49jpsYr0ADedCk1wq6fTMTvs= +golang.org/x/image v0.0.0-20210628002857-a66eb6448b8d/go.mod h1:023OzeP/+EPmXeapQh35lcL3II3LrY8Ic+EFFKVhULM= golang.org/x/lint v0.0.0-20181026193005-c67002cb31c3/go.mod h1:UVdnD1Gm6xHRNCYTkRU2/jEulfH38KcIWyp/GAMgvoE= golang.org/x/lint v0.0.0-20190227174305-5b3e6a55c961/go.mod h1:wehouNa3lNwaWXcvxsM5YxQ5yQlVC4a0KAMCusXpPoU= golang.org/x/lint v0.0.0-20190301231843-5614ed5bae6f/go.mod h1:UVdnD1Gm6xHRNCYTkRU2/jEulfH38KcIWyp/GAMgvoE= @@ -873,6 +881,12 @@ golang.org/x/oauth2 v0.0.0-20210514164344-f6687ab2804c h1:pkQiBZBvdos9qq4wBAHqlz golang.org/x/oauth2 v0.0.0-20210514164344-f6687ab2804c/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A= golang.org/x/oauth2 v0.0.0-20210615190721-d04028783cf1 h1:x622Z2o4hgCr/4CiKWc51jHVKaWdtVpBNmEI8wI9Qns= golang.org/x/oauth2 v0.0.0-20210615190721-d04028783cf1/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A= +golang.org/x/oauth2 v0.0.0-20210622165204-14747e66f690 h1:CumsZJtggBHMuGYO/Pnf0VisrfI80IpCueqWTDj+jXM= +golang.org/x/oauth2 v0.0.0-20210622165204-14747e66f690/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A= +golang.org/x/oauth2 v0.0.0-20210622190553-bce0382f6c22 h1:YgVHL+41eV49pteYu9PQEn7BhKUnN2Eq6TOBoy+3kao= +golang.org/x/oauth2 v0.0.0-20210622190553-bce0382f6c22/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A= +golang.org/x/oauth2 v0.0.0-20210622215436-a8dc77f794b6 h1:pERGha6IgvMUdN6oJbwjZTt1ai5/O855Qmv1Bsc0v18= +golang.org/x/oauth2 v0.0.0-20210622215436-a8dc77f794b6/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A= golang.org/x/sync v0.0.0-20180314180146-1d60e4601c6f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20181108010431-42b317875d0f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20181221193216-37e7f081c4d4/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= diff --git a/pkg/modules/migration/todoist/todoist.go b/pkg/modules/migration/todoist/todoist.go index ff7d4cf588..0de2acf933 100644 --- a/pkg/modules/migration/todoist/todoist.go +++ b/pkg/modules/migration/todoist/todoist.go @@ -418,6 +418,7 @@ func convertTodoistToVikunja(sync *sync) (fullVikunjaHierachie []*models.Namespa if _, exists := tasks[r.ItemID]; !exists { log.Debugf("Could not find task %d for reminder %d while trying to resolve reminders", r.ItemID, r.ID) + continue } date, err := parseDate(r.Due.Date)