diff --git a/moodle.config.json b/moodle.config.json index fdd06c0d4..c989b34d9 100644 --- a/moodle.config.json +++ b/moodle.config.json @@ -48,6 +48,7 @@ "nl": "Nederlands", "no": "Norsk", "pl": "Polski", + "ps": "پښتو", "pt": "Português - Portugal", "pt-br": "Português - Brasil", "ro": "Română", diff --git a/scripts/update_lang_functions.sh b/scripts/update_lang_functions.sh index 42834411b..1b9384297 100755 --- a/scripts/update_lang_functions.sh +++ b/scripts/update_lang_functions.sh @@ -154,13 +154,15 @@ function generate_local_module_file { print_title "Generating $APPMODULENAME..." + gulp + module_translations='' keys=$(jq -r 'map_values(select(contains("local_moodlemobileapp"))) | keys[]' langindex.json) for key in $keys; do # Check if already parsed. translation=$(jq -r .\""$key"\" "$LANG_PATH"/en.json) - if [ -z "$translation" ]; then + if [ -z "$translation" ] || [ "$translation" == 'null' ]; then echo "Key $key not translated!" continue fi diff --git a/src/addons/enrol/guest/lang.json b/src/addons/enrol/guest/lang.json index 484eb14b6..d7baae1fb 100644 --- a/src/addons/enrol/guest/lang.json +++ b/src/addons/enrol/guest/lang.json @@ -1,5 +1,5 @@ { - "guestaccess_withpassword": "Guest access requires password", "guestaccess_withoutpassword": "Guest access", + "guestaccess_withpassword": "Guest access requires password", "passwordinvalid": "Incorrect access password, please try again" } diff --git a/src/addons/enrol/self/lang.json b/src/addons/enrol/self/lang.json index 89407c2d7..1fceb0abb 100644 --- a/src/addons/enrol/self/lang.json +++ b/src/addons/enrol/self/lang.json @@ -1,7 +1,7 @@ { - "pluginname": "Self enrolment", "confirmselfenrol": "Are you sure you want to enrol yourself in this course?", "errorselfenrol": "An error occurred while self enrolling.", "nopassword": "No enrolment key required.", - "password": "Enrolment key" + "password": "Enrolment key", + "pluginname": "Self enrolment" } diff --git a/src/assets/img/login/faq_qrcode.png b/src/assets/img/login/faq_qrcode.png index cc936b168..d5603e8c4 100644 Binary files a/src/assets/img/login/faq_qrcode.png and b/src/assets/img/login/faq_qrcode.png differ diff --git a/src/core/features/course/lang.json b/src/core/features/course/lang.json index 22ab99028..00cea37a3 100644 --- a/src/core/features/course/lang.json +++ b/src/core/features/course/lang.json @@ -12,11 +12,11 @@ "completion_manual:aria:markdone": "Mark {{$a}} as done", "completion_manual:done": "Done", "completion_manual:markdone": "Mark as done", - "completionmenuitem": "Completion", "completion_setby:auto:done": "Done: {{$a.condition}} (set by {{$a.setby}})", "completion_setby:auto:todo": "To do: {{$a.condition}} (set by {{$a.setby}})", "completion_setby:manual:done": "{{$a.activityname}} is marked by {{$a.setby}} as done. Press to undo.", "completion_setby:manual:markdone": "{{$a.activityname}} is marked by {{$a.setby}} as not done. Press to mark as done.", + "completionmenuitem": "Completion", "completionrequirements": "Completion requirements for {{$a}}", "confirmdownload": "You are about to download {{size}}.{{availableSpace}} Are you sure you want to continue?", "confirmdownloadunknownsize": "It was not possible to calculate the size of the download.{{availableSpace}} Are you sure you want to continue?", @@ -63,6 +63,6 @@ "useactivityonbrowser": "You can still use it using your device's web browser.", "viewcourse": "View course", "warningmanualcompletionmodified": "The manual completion of an activity was modified on the site.", - "youmust": "You must", - "warningofflinemanualcompletiondeleted": "Some offline manual completion of course '{{name}}' has been deleted. {{error}}" + "warningofflinemanualcompletiondeleted": "Some offline manual completion of course '{{name}}' has been deleted. {{error}}", + "youmust": "You must" } diff --git a/src/core/features/login/lang.json b/src/core/features/login/lang.json index c9bad9613..8dde2f6f7 100644 --- a/src/core/features/login/lang.json +++ b/src/core/features/login/lang.json @@ -119,7 +119,7 @@ "sitenotallowed": "This site is no longer available.", "sitepolicynotagreederror": "Site policy not agreed.", "siteurl": "Site URL", - "siteurlrequired": "Site URL required i.e http://www.yourmoodlesite.org", + "siteurlrequired": "Site URL required i.e https://campus.example.edu", "startsignup": "Create new account", "stillcantconnect": "Still can't connect?", "supplyinfo": "More details", diff --git a/src/core/features/login/services/login-helper.ts b/src/core/features/login/services/login-helper.ts index 368a69a6a..bbf4c2810 100644 --- a/src/core/features/login/services/login-helper.ts +++ b/src/core/features/login/services/login-helper.ts @@ -53,6 +53,7 @@ export const GET_STARTED_URL = 'https://moodle.com'; export class CoreLoginHelperProvider { static readonly ONBOARDING_DONE = 'onboarding_done'; + static readonly FAQ_QRCODE_INFO_DONE = 'qrcode_info_done'; static readonly FAQ_URL_IMAGE_HTML = ''; static readonly FAQ_QRCODE_IMAGE_HTML = ''; @@ -1221,26 +1222,33 @@ export class CoreLoginHelperProvider { * @returns Promise resolved if the user accepts to scan QR. */ async showScanQRInstructions(): Promise { - await new Promise((resolve, reject) => { - CoreDomUtils.showAlertWithOptions({ - header: Translate.instant('core.login.faqwhereisqrcode'), - message: Translate.instant( - 'core.login.faqwhereisqrcodeanswer', - { $image: CoreLoginHelperProvider.FAQ_QRCODE_IMAGE_HTML }, - ), - buttons: [ - { - text: Translate.instant('core.cancel'), - role: 'cancel', - handler: () => reject(new CoreCanceledError()), - }, - { - text: Translate.instant('core.next'), - handler: () => resolve(), - }, - ], - }); - }); + const dontShowWarning = await CoreConfig.get(CoreLoginHelperProvider.FAQ_QRCODE_INFO_DONE, 0); + if (dontShowWarning) { + return; + } + + const message = Translate.instant( + 'core.login.faqwhereisqrcodeanswer', + { $image: '
'+ CoreLoginHelperProvider.FAQ_QRCODE_IMAGE_HTML + '
' }, + ); + const header = Translate.instant('core.login.faqwhereisqrcode'); + + try { + const dontShowAgain = await CoreDomUtils.showPrompt( + message, + header, + Translate.instant('core.dontshowagain'), + 'checkbox', + { okText: Translate.instant('core.next'), cancelText: Translate.instant('core.cancel') }, + ); + + if (dontShowAgain) { + CoreConfig.set(CoreLoginHelperProvider.FAQ_QRCODE_INFO_DONE, 1); + } + } catch { + // User canceled. + throw new CoreCanceledError(''); + } } /** diff --git a/src/core/features/search/lang.json b/src/core/features/search/lang.json index 24824a183..5a17626cd 100644 --- a/src/core/features/search/lang.json +++ b/src/core/features/search/lang.json @@ -1,6 +1,6 @@ { - "allcourses": "All courses", "allcategories": "All categories", + "allcourses": "All courses", "empty": "What are you searching for?", "filtercategories": "Filter results by", "filtercourses": "Search in", diff --git a/src/core/features/settings/pages/dev/dev.ts b/src/core/features/settings/pages/dev/dev.ts index c916950cb..532f59c60 100644 --- a/src/core/features/settings/pages/dev/dev.ts +++ b/src/core/features/settings/pages/dev/dev.ts @@ -165,6 +165,7 @@ export class CoreSettingsDevPage implements OnInit { await CoreUserTours.resetTours(); await CoreConfig.delete(CoreLoginHelperProvider.ONBOARDING_DONE); + await CoreConfig.delete(CoreLoginHelperProvider.FAQ_QRCODE_INFO_DONE); CoreDomUtils.showToast('User tours have been reseted'); }