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 '
).
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.
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.
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*.