diff --git a/NEWS.md b/NEWS.md index 03b912b61..1123dc45f 100644 --- a/NEWS.md +++ b/NEWS.md @@ -1,5 +1,7 @@ # learnr (development version) +- Added Norwegian translation contributed by @jonovik. (#806) + # learnr 0.11.5 ## New Features diff --git a/data-raw/i18n_random-phrases.yml b/data-raw/i18n_random-phrases.yml index 66453b7ab..60b115a89 100644 --- a/data-raw/i18n_random-phrases.yml +++ b/data-raw/i18n_random-phrases.yml @@ -167,7 +167,40 @@ praise: - Bardzo dobrze! - Jeśli to zadanie jest skocznią, to Ty jesteś Małyszem! - Gratulacje! - + "no": + - Fabelaktig! + - Glimrende! + - Supert! + - Nydelig! + - Bravo! + - Bra jobba! + - Lekkert! + - Utmerket! + - Fantastisk! + - Flott arbeid! + - Kunne ikke gjort det bedre selv. + - Imponerende! + - Pent arbeid! + - Strålende! + - Helt vilt! + - Knallbra! + - Her har vi noen som vet hva de driver med :) + - Utsøkt jobb! + - Suksess! + - Superb! + - Alle tiders! + - Herlig! + - Førsteklasses svar! + - Hinsides bra! + - Utrulig! + - Meget bra! + - Godt gjort! + - Førsteklasses arbeid! + - Kløktig! + - Vidunderlig! + - Dét naila du! + - Du, altså! + - Du kan være stolt av deg selv. encouragement: testing: - RANDOM ENCOURAGEMENT. @@ -180,7 +213,7 @@ encouragement: - But no need to fret, try it again. - Try it again. I have a good feeling about this. - Try it again. You get better each time. - - Try it again. Perseverence is the key to success. + - Try it again. Perseverance is the key to success. - "That's okay: you learn more from mistakes than successes. Let's do it one more time." pt: - Tente novamente, sinto que na próxima vai dar certo! @@ -254,3 +287,14 @@ encouragement: - Wytrwałość to klucz do sukcesu, spróbujmy jeszcze raz. - Do skutku! Tak możemy się uczyć. - Nikodemowi Dyzmie też na początku nie było łatwo! + "no": + - Prøv igjen 8-) + - Ett forsøk til! + - Prøv en gang til. + - Én gang til nå, så sitter det sikkert! + - Ikke gi opp nå! Prøv én gang til. + - Ingen ting å deppe over. Prøv igjen! + - Gi det ett forsøk til. Jeg føler på meg at du er like ved å klare det. + - Prøv igjen. Du blir bedre for hver gang. + - Prøv igjen. Utholdenhet lønner seg! + - Det gjør ingen ting. Du lærer ofte mer av å mislykkes enn av å ha det enkelt. La oss prøve en gang til. diff --git a/data-raw/i18n_translations.yml b/data-raw/i18n_translations.yml index 194614266..51ff1ab41 100644 --- a/data-raw/i18n_translations.yml +++ b/data-raw/i18n_translations.yml @@ -1,5 +1,9 @@ #### NOTE: This file is the original data for {learnr} by data-raw/i18n_translations.R #### +# After editing this file, run data-raw/i18n_translations.R +# to regenerate inst/internals/i18n_translations.rds +# and inst/internals/i18n_random_phrases.rds. + # Translations for {learnr} Documents ------------------------------------------ # # ## Re-using keys @@ -27,14 +31,14 @@ # ## Tilde and Empty Strings # # * Use `~` to indicate NULL values that should fall back to the default -# English text. +# English text # * Use an empty string, `""`, when no text should be printed at all # (use with caution) # * Quote all strings with double quotes # # ## Language Codes # -# {learnr}'s internationalization doesn't impose strict requirements around The +# {learnr}'s internationalization doesn't impose strict requirements around the # formatting of the language code. However, for best results, please use one of # the language codes used in the bootbox library, to ensure that modals used in # tutorials are also translated: @@ -65,6 +69,7 @@ button: ko: "코드 실행" zh: "运行代码" pl: "Uruchom kod" + "no": "Kjør kode" runcodetitle: # {{kbd}} — The keyboard shortcut that triggers the runcode button en: "$t(button.runcode) ({{kbd}})" @@ -78,6 +83,7 @@ button: ko: "$t(button.runcode) ({{kbd}})" zh: "$t(button.runcode) ({{kbd}})" pl: "$t(button.runcode) ({{kbd}})" + "no": "$t(button.runcode) ({{kbd}})" hint: en: "Hint" fr: "Indication" @@ -90,6 +96,7 @@ button: ko: "힌트" zh: "提示" pl: "Podpowiedź" + "no": "Hint" hint_plural: en: "Hints" fr: "Indications" @@ -102,6 +109,7 @@ button: ko: "힌트들" zh: "提示" pl: "Podpowiedzi" + "no": "Hint" hinttitle: en: "$t(button.hint)" fr: "$t(button.hint)" @@ -114,6 +122,7 @@ button: ko: "$t(button.hint)" zh: "$t(button.hint)" pl: "$t(button.hint)" + "no": "$t(button.hint)" hintnext: en: "Next Hint" fr: "Indication Suivante" @@ -126,6 +135,7 @@ button: ko: "다음 힌트" zh: "下一个提示" pl: "Następna podpowiedź" + "no": "Neste hint" hintprev: en: "Previous Hint" fr: "Indication Précédente" @@ -138,6 +148,7 @@ button: ko: "이전 힌트" zh: "上一个提示" pl: "Poprzednia podpowiedź" + "no": "Forrige hint" solution: en: "Solution" fr: "Solution" @@ -150,6 +161,7 @@ button: ko: "솔루션" zh: "答案" pl: "Rozwiązanie" + "no": "Løsning" solutiontitle: en: "$t(button.solution)" fr: "$t(button.solution)" @@ -162,6 +174,7 @@ button: ko: "$t(button.solution)" zh: "$t(button.solution)" pl: "$t(button.solution)" + "no": "$t(button.solution)" copyclipboard: en: "Copy to Clipboard" fr: "Copier dans le Presse-papier" @@ -174,6 +187,7 @@ button: ko: "클립보드에 복사" zh: "复制到剪切板" pl: "Kopiuj do schowka" + "no": "Kopier til utklippstavle" startover: en: "Start Over" fr: "Recommencer" @@ -186,6 +200,7 @@ button: ko: "재학습" zh: "重新开始" pl: "Zacznij od początku" + "no": "Start på nytt" startovertitle: en: "$t(button.startover)" fr: "$t(button.startover)" @@ -198,6 +213,7 @@ button: ko: "$t(button.startover)" zh: "$t(button.startover)" pl: "$t(button.startover)" + "no": "$t(button.startover)" continue: en: "Continue" fr: "Continuer" @@ -210,6 +226,7 @@ button: ko: "다음 학습으로" zh: "继续" pl: "Kontynuuj" + "no": "Fortsett" submitanswer: en: "Submit Answer" fr: "Soumettre" @@ -222,6 +239,7 @@ button: ko: "정답 제출" zh: "提交答案" pl: "Wyślij" + "no": "Send inn svar" submitanswertitle: en: "$t(button.submitanswer)" fr: "$t(button.submitanswer)" @@ -234,6 +252,7 @@ button: ko: "$t(button.submitanswer)" zh: "$t(button.submitanswer)" pl: "$t(button.submitanswer)" + "no": "$t(button.submitanswer)" previoustopic: en: "Previous Topic" fr: "Chapitre Précédent" @@ -246,6 +265,7 @@ button: ko: "이전 토픽" zh: "上一专题" pl: "Poprzednia sekcja" + "no": "Forrige tema" nexttopic: en: "Next Topic" fr: "Chapitre Suivant" @@ -258,6 +278,7 @@ button: ko: "다음 토픽" zh: "下一专题" pl: "Następna sekcja" + "no": "Neste tema" questionsubmit: en: "$t(button.submitanswer)" fr: "$t(button.submitanswer)" @@ -270,6 +291,7 @@ button: ko: "$t(button.submitanswer)" zh: "$t(button.submitanswer)" pl: "$t(button.submitanswer)" + "no": "$t(button.submitanswer)" questiontryagain: en: "Try Again" fr: "Réessayer" @@ -282,6 +304,7 @@ button: ko: "재시도" zh: "再试一次" pl: "Spróbuj ponownie" + "no": "Prøv igjen" text: startover: en: "Start Over" @@ -295,8 +318,9 @@ text: ko: "재학습" zh: "重置" pl: "Zacznij od początku" + "no": "Start på nytt" areyousure: - en: "Are you sure you want to start over? (all exercise progress will be reset)" + en: "Are you sure you want to start over? (All exercise progress will be reset)" fr: "Êtes-vous certains de vouloir recommencer? (La progression sera remise à zéro)" es: "¿De verdad quieres empezar de nuevo? (todo el progreso del ejercicio se perderá)" pt: "Tem certeza que deseja começar novamente? (todo o progresso feito será perdido)" @@ -307,6 +331,7 @@ text: ko: "다시 시작 하시겠습니까? (모든 예제의 진행 정보가 재설정됩니다)" zh: "你确定要重新开始吗? (所有当前进度将被重置)" pl: "Czy na pewno chcesz zacząć od początku? (cały postęp w zadaniu zostanie utracony)" + "no": "Er du sikker på at du vil starte på nytt? (All fremgang vil bli slettet)" youmustcomplete: en: "You must complete the" fr: "Vous devez d'abord compléter" @@ -319,6 +344,7 @@ text: ko: "당신은 완료해야 합니다" zh: "你必须完成" pl: "Musisz ukończyć" + "no": "Du må fullføre" exercise: en: "exercise" fr: "l'exercice" @@ -331,6 +357,7 @@ text: ko: "연습문제" zh: "练习" pl: "ćwiczenie" + "no": "oppgave" exercise_plural: en: "exercises" fr: "des exercices" @@ -343,6 +370,7 @@ text: ko: "연습문제들" zh: "练习" pl: "ćwiczenia" + "no": "oppgaver" inthissection: en: "in this section before continuing." fr: "de cette section avec de continuer." @@ -355,6 +383,7 @@ text: ko: "이 섹션을 실행하기 전에" zh: "在进行本节之前" pl: "w tej sekcji przed kontynuowaniem" + "no": "i denne seksjonen før du fortsetter." code: en: "Code" fr: "Code" @@ -367,6 +396,7 @@ text: ko: "코드" zh: "代码" pl: "Kod" + "no": "kode" enginecap: # {{engine}} — The code engine used by the exercise, e.g. "R", "SQL", "JavaScript" en: "{{engine}} $t(text.code)" @@ -380,6 +410,7 @@ text: ko: "$t(text.code) {{engine}}" zh: "$t(text.code) {{engine}}" pl: "$t(text.code) {{engine}}" + "no": "{{engine}}-$t(text.code)" quiz: en: "Quiz" fr: "Quiz" @@ -392,6 +423,7 @@ text: ko: "퀴즈" zh: "测试" pl: "Quiz" + "no": "Quiz" blank: en: "blank" fr: ~ @@ -404,6 +436,7 @@ text: ko: "공백" zh: "空" pl: "luka" + "no": "tomrom" blank_plural: en: "blanks" fr: ~ @@ -416,6 +449,7 @@ text: ko: "공백들" zh: "空" pl: "luk(i)" + "no": "tomrom" exercisecontainsblank: # {{count}} - the number of blanks detected in the exercise en: "This exercise contains {{count}} $t(text.blank)." @@ -429,6 +463,7 @@ text: ko: "이 연습문제에는 {{count}}개의 $t(text.blank)이 포함되어 있습니다." zh: "本练习包含{{count}}个$t(text.blank)" pl: "To ćwiczenie zawiera {{count}} $t(text.blank)." + "no": "Denne oppgaven inneholder {{count}} $t(text.blank)." pleasereplaceblank: # {{blank}} - the string representing a blank in the exercise (e.g. "___") en: "Please replace {{blank}} with valid code." @@ -442,6 +477,7 @@ text: ko: "{{blank}}를 유효한 코드로 바꾸십시오." zh: "请在{{blank}}内填写恰当的代码" pl: "Proszę uzupełnić {{blank}} prawidłowym kodem." + "no": "Erstatt {{blank}} med gyldig kode." unparsable: en: > It looks like this might not be valid R code. @@ -486,6 +522,14 @@ text: lub zamknąć znak ", ', ( lub { odpowiadającym ", ', ) lub }. + "no": > + Dette ser ikke ut til å være gyldig R-kode. + Slik R ser det, utgjør ikke teksten en fullstendig kommando. + Du kan ha glemt å fylle ut en luke, + å fjerne en understrek, å inkludere et komma mellom argumenter, + eller å lukke et åpnende ", ', ( + eller { med et tilsvarende ", ', + ) eller }. unparsablequotes: en: >

It looks like your R code contains specially formatted quotation marks @@ -525,7 +569,18 @@ text: Możesz spróbować zastąpić swój kod następującym kodem. Mogą być też inne miejsca, które wymagają poprawienia.

{{suggestion}} - + "no": > +

Det ser ut som om R-koden din inneholder spesielt formaterte + anførselstegn eller "krøllete" anførselstegn + ({{character}}) rundt tekststrenger, noe som gjør koden din + ugyldig. R krever at tekstverdier skal være inneholdt i rette anførselstegn + (" eller ').

+ {{code}} +

Dette er et vanlig problem når du kopierer kode fra et annet program + som bruker sin egen formatering på tekst. + Du kan prøve å erstatte koden i den linjen med følgende. + Kanskje er det også andre steder som må fikses.

+ {{suggestion}} unparsableunicode: en: >

It looks like your R code contains an unexpected special character @@ -556,6 +611,15 @@ text:

Czasami Twój kod może zawierać znak specjalny, który wygląda jak zwykły znak, zwłaszcza jeśli kopiujesz kod z innego programu. Spróbuj usunąć znak specjalny i wpisać do ponownie ręcznie.

+ "no": > +

Det ser ut som om R-koden din inneholder et uventet spesialtegn + ({{character}}) som gjør koden din ugyldig.

+ {{code}} +

Noen ganger kan koden din inneholde et spesialtegn som ser ut som et + vanlig tegn, spesielt hvis du kopierer og limer inn koden fra et annet + program. + Prøv å slette spesialtegnet fra koden din og skriv det inn på nytt + for hånd.

unparsableunicodesuggestion: en: >

It looks like your R code contains an unexpected special character @@ -589,6 +653,16 @@ text: Możesz spróbować zastąpić swój kod następującym kodem. Mogą być też inne miejsca, które wymagają poprawienia.

{{suggestion}} + "no": > +

Det ser ut som om R-koden din inneholder et uventet spesialtegn + ({{character}}) som gjør koden din ugyldig.

+ {{code}} +

Noen ganger kan koden din inneholde et spesialtegn som ser ut som et + vanlig tegn, spesielt hvis du kopierer og limer inn koden fra et annet + program. + Du kan prøve å erstatte koden i den linjen med følgende. + Kanskje er det også andre steder som må fikses.

+ {{suggestion}} and: en: "and" fr: "et" @@ -601,6 +675,7 @@ text: ko: "그리고" zh: "且" pl: "i" + "no": "og" or: en: "or" fr: "ou" @@ -613,6 +688,7 @@ text: ko: "혹은" zh: "或" pl: "lub" + "no": "eller" listcomma: # Some languages (e.g. Chinese, Korean) use a different punctuation mark for # separating list items @@ -627,6 +703,7 @@ text: ko: ", " zh: "," pl: ", " + "no": ", " oxfordcomma: en: "," fr: "" @@ -639,3 +716,4 @@ text: ko: "" zh: "," pl: "" + "no": "" diff --git a/inst/internals/i18n_random_phrases.rds b/inst/internals/i18n_random_phrases.rds index e375fe7d0..6f019bb7e 100644 Binary files a/inst/internals/i18n_random_phrases.rds and b/inst/internals/i18n_random_phrases.rds differ diff --git a/inst/internals/i18n_translations.rds b/inst/internals/i18n_translations.rds index 3c576270e..4a057f38e 100644 Binary files a/inst/internals/i18n_translations.rds and b/inst/internals/i18n_translations.rds differ diff --git a/vignettes/multilang.Rmd b/vignettes/multilang.Rmd index 91bc19824..66789796d 100644 --- a/vignettes/multilang.Rmd +++ b/vignettes/multilang.Rmd @@ -74,11 +74,16 @@ Currently, `r length(learnr_langs)` language translations are supported: ```{r echo=FALSE, results="asis"} for (lng in learnr_langs) { lng_name <- if (lng %in% names(languages)) paste(" for", languages[lng]) - if (lng == "en") paste(lng_name, "(default)") + if (lng == "en") + lng_name <- paste(lng_name, "(default)") + if (lng == "zh") + lng_name <- " for Chinese" cat("\n- `", lng, "`", lng_name, sep = "") } ``` +Note that `"no"` needs to be quoted because it is a reserved word in YAML. + ## Customizable UI elements: There are many elements whose language can be translated or customized, each identified by a *key*.