diff --git a/apps/flutter_parent/assets/svg/canvas-parent-login-logo-dark.svg b/apps/flutter_parent/assets/svg/canvas-parent-login-logo-dark.svg
index ab80d41cfa..4a79d0ce92 100644
--- a/apps/flutter_parent/assets/svg/canvas-parent-login-logo-dark.svg
+++ b/apps/flutter_parent/assets/svg/canvas-parent-login-logo-dark.svg
@@ -1,10 +1,10 @@
diff --git a/apps/flutter_parent/assets/svg/canvas-parent-login-logo.svg b/apps/flutter_parent/assets/svg/canvas-parent-login-logo.svg
index b595560d0c..7a6ad0883c 100644
--- a/apps/flutter_parent/assets/svg/canvas-parent-login-logo.svg
+++ b/apps/flutter_parent/assets/svg/canvas-parent-login-logo.svg
@@ -1,10 +1,10 @@
diff --git a/apps/flutter_parent/lib/l10n/app_localizations.dart b/apps/flutter_parent/lib/l10n/app_localizations.dart
index 0e831ca07e..53eda6d918 100644
--- a/apps/flutter_parent/lib/l10n/app_localizations.dart
+++ b/apps/flutter_parent/lib/l10n/app_localizations.dart
@@ -1705,4 +1705,7 @@ class AppLocalizations {
String get aboutLogoSemanticsLabel =>
Intl.message('Instructure logo', desc: 'Semantics label for the Instructure logo on the about page');
+
+ String get needToEnablePermission =>
+ Intl.message('You need to enable exact alarm permission for this action', desc: 'Error message when the user tries to set a reminder without the permission');
}
diff --git a/apps/flutter_parent/lib/l10n/res/intl_ar.arb b/apps/flutter_parent/lib/l10n/res/intl_ar.arb
index fd7594f1fd..65ec9faab5 100644
--- a/apps/flutter_parent/lib/l10n/res/intl_ar.arb
+++ b/apps/flutter_parent/lib/l10n/res/intl_ar.arb
@@ -1,5 +1,5 @@
{
- "@@last_modified": "2023-04-14T11:04:46.988317",
+ "@@last_modified": "2023-08-25T11:04:20.901151",
"alertsLabel": "التنبيهات",
"@alertsLabel": {
"description": "The label for the Alerts tab",
@@ -2742,5 +2742,12 @@
"type": "text",
"placeholders_order": [],
"placeholders": {}
+ },
+ "Instructure logo": "شعار Instructure",
+ "@Instructure logo": {
+ "description": "Semantics label for the Instructure logo on the about page",
+ "type": "text",
+ "placeholders_order": [],
+ "placeholders": {}
}
}
\ No newline at end of file
diff --git a/apps/flutter_parent/lib/l10n/res/intl_ca.arb b/apps/flutter_parent/lib/l10n/res/intl_ca.arb
index 9f2971adb7..c153306375 100644
--- a/apps/flutter_parent/lib/l10n/res/intl_ca.arb
+++ b/apps/flutter_parent/lib/l10n/res/intl_ca.arb
@@ -1,5 +1,5 @@
{
- "@@last_modified": "2023-04-14T11:04:46.988317",
+ "@@last_modified": "2023-08-25T11:04:20.901151",
"alertsLabel": "Avisos",
"@alertsLabel": {
"description": "The label for the Alerts tab",
@@ -2742,5 +2742,12 @@
"type": "text",
"placeholders_order": [],
"placeholders": {}
+ },
+ "Instructure logo": "Logotip de l’Instructure",
+ "@Instructure logo": {
+ "description": "Semantics label for the Instructure logo on the about page",
+ "type": "text",
+ "placeholders_order": [],
+ "placeholders": {}
}
}
\ No newline at end of file
diff --git a/apps/flutter_parent/lib/l10n/res/intl_cy.arb b/apps/flutter_parent/lib/l10n/res/intl_cy.arb
index 3f62546257..4b8db4b546 100644
--- a/apps/flutter_parent/lib/l10n/res/intl_cy.arb
+++ b/apps/flutter_parent/lib/l10n/res/intl_cy.arb
@@ -1,5 +1,5 @@
{
- "@@last_modified": "2023-04-14T11:04:46.988317",
+ "@@last_modified": "2023-08-25T11:04:20.901151",
"alertsLabel": "Negeseuon Hysbysu",
"@alertsLabel": {
"description": "The label for the Alerts tab",
@@ -2742,5 +2742,12 @@
"type": "text",
"placeholders_order": [],
"placeholders": {}
+ },
+ "Instructure logo": "Logo Instructure",
+ "@Instructure logo": {
+ "description": "Semantics label for the Instructure logo on the about page",
+ "type": "text",
+ "placeholders_order": [],
+ "placeholders": {}
}
}
\ No newline at end of file
diff --git a/apps/flutter_parent/lib/l10n/res/intl_da.arb b/apps/flutter_parent/lib/l10n/res/intl_da.arb
index 30f0d4b2ba..e1b63cd05d 100644
--- a/apps/flutter_parent/lib/l10n/res/intl_da.arb
+++ b/apps/flutter_parent/lib/l10n/res/intl_da.arb
@@ -1,5 +1,5 @@
{
- "@@last_modified": "2023-04-14T11:04:46.988317",
+ "@@last_modified": "2023-08-25T11:04:20.901151",
"alertsLabel": "Varslinger",
"@alertsLabel": {
"description": "The label for the Alerts tab",
@@ -2742,5 +2742,12 @@
"type": "text",
"placeholders_order": [],
"placeholders": {}
+ },
+ "Instructure logo": "Instructure-logo",
+ "@Instructure logo": {
+ "description": "Semantics label for the Instructure logo on the about page",
+ "type": "text",
+ "placeholders_order": [],
+ "placeholders": {}
}
}
\ No newline at end of file
diff --git a/apps/flutter_parent/lib/l10n/res/intl_da_instk12.arb b/apps/flutter_parent/lib/l10n/res/intl_da_instk12.arb
index 02860edf64..7963c41b68 100644
--- a/apps/flutter_parent/lib/l10n/res/intl_da_instk12.arb
+++ b/apps/flutter_parent/lib/l10n/res/intl_da_instk12.arb
@@ -1,5 +1,5 @@
{
- "@@last_modified": "2023-04-14T11:04:46.988317",
+ "@@last_modified": "2023-08-25T11:04:20.901151",
"alertsLabel": "Varslinger",
"@alertsLabel": {
"description": "The label for the Alerts tab",
@@ -2742,5 +2742,12 @@
"type": "text",
"placeholders_order": [],
"placeholders": {}
+ },
+ "Instructure logo": "Instructure-logo",
+ "@Instructure logo": {
+ "description": "Semantics label for the Instructure logo on the about page",
+ "type": "text",
+ "placeholders_order": [],
+ "placeholders": {}
}
}
\ No newline at end of file
diff --git a/apps/flutter_parent/lib/l10n/res/intl_de.arb b/apps/flutter_parent/lib/l10n/res/intl_de.arb
index 2f61a02006..a7a3052886 100644
--- a/apps/flutter_parent/lib/l10n/res/intl_de.arb
+++ b/apps/flutter_parent/lib/l10n/res/intl_de.arb
@@ -1,5 +1,5 @@
{
- "@@last_modified": "2023-04-14T11:04:46.988317",
+ "@@last_modified": "2023-08-25T11:04:20.901151",
"alertsLabel": "Benachrichtigungen",
"@alertsLabel": {
"description": "The label for the Alerts tab",
@@ -2742,5 +2742,12 @@
"type": "text",
"placeholders_order": [],
"placeholders": {}
+ },
+ "Instructure logo": "Instructure-Logo",
+ "@Instructure logo": {
+ "description": "Semantics label for the Instructure logo on the about page",
+ "type": "text",
+ "placeholders_order": [],
+ "placeholders": {}
}
}
\ No newline at end of file
diff --git a/apps/flutter_parent/lib/l10n/res/intl_en_AU.arb b/apps/flutter_parent/lib/l10n/res/intl_en_AU.arb
index b3eed19106..1436c15ccb 100644
--- a/apps/flutter_parent/lib/l10n/res/intl_en_AU.arb
+++ b/apps/flutter_parent/lib/l10n/res/intl_en_AU.arb
@@ -1,5 +1,5 @@
{
- "@@last_modified": "2023-04-14T11:04:46.988317",
+ "@@last_modified": "2023-08-25T11:04:20.901151",
"alertsLabel": "Alerts",
"@alertsLabel": {
"description": "The label for the Alerts tab",
@@ -2742,5 +2742,12 @@
"type": "text",
"placeholders_order": [],
"placeholders": {}
+ },
+ "Instructure logo": "Instructure logo",
+ "@Instructure logo": {
+ "description": "Semantics label for the Instructure logo on the about page",
+ "type": "text",
+ "placeholders_order": [],
+ "placeholders": {}
}
}
\ No newline at end of file
diff --git a/apps/flutter_parent/lib/l10n/res/intl_en_AU_unimelb.arb b/apps/flutter_parent/lib/l10n/res/intl_en_AU_unimelb.arb
index b2b3fbdd7d..3a866f3833 100644
--- a/apps/flutter_parent/lib/l10n/res/intl_en_AU_unimelb.arb
+++ b/apps/flutter_parent/lib/l10n/res/intl_en_AU_unimelb.arb
@@ -1,5 +1,5 @@
{
- "@@last_modified": "2023-04-14T11:04:46.988317",
+ "@@last_modified": "2023-08-25T11:04:20.901151",
"alertsLabel": "Alerts",
"@alertsLabel": {
"description": "The label for the Alerts tab",
@@ -2742,5 +2742,12 @@
"type": "text",
"placeholders_order": [],
"placeholders": {}
+ },
+ "Instructure logo": "Instructure logo",
+ "@Instructure logo": {
+ "description": "Semantics label for the Instructure logo on the about page",
+ "type": "text",
+ "placeholders_order": [],
+ "placeholders": {}
}
}
\ No newline at end of file
diff --git a/apps/flutter_parent/lib/l10n/res/intl_en_CY.arb b/apps/flutter_parent/lib/l10n/res/intl_en_CY.arb
index 8fe52d88ba..3fa7227f2d 100644
--- a/apps/flutter_parent/lib/l10n/res/intl_en_CY.arb
+++ b/apps/flutter_parent/lib/l10n/res/intl_en_CY.arb
@@ -1,5 +1,5 @@
{
- "@@last_modified": "2023-04-14T11:04:46.988317",
+ "@@last_modified": "2023-08-25T11:04:20.901151",
"alertsLabel": "Alerts",
"@alertsLabel": {
"description": "The label for the Alerts tab",
@@ -2742,5 +2742,12 @@
"type": "text",
"placeholders_order": [],
"placeholders": {}
+ },
+ "Instructure logo": "Instructure logo",
+ "@Instructure logo": {
+ "description": "Semantics label for the Instructure logo on the about page",
+ "type": "text",
+ "placeholders_order": [],
+ "placeholders": {}
}
}
\ No newline at end of file
diff --git a/apps/flutter_parent/lib/l10n/res/intl_en_GB.arb b/apps/flutter_parent/lib/l10n/res/intl_en_GB.arb
index 61612c9b10..cc92a7ec53 100644
--- a/apps/flutter_parent/lib/l10n/res/intl_en_GB.arb
+++ b/apps/flutter_parent/lib/l10n/res/intl_en_GB.arb
@@ -1,5 +1,5 @@
{
- "@@last_modified": "2023-04-14T11:04:46.988317",
+ "@@last_modified": "2023-08-25T11:04:20.901151",
"alertsLabel": "Alerts",
"@alertsLabel": {
"description": "The label for the Alerts tab",
@@ -2742,5 +2742,12 @@
"type": "text",
"placeholders_order": [],
"placeholders": {}
+ },
+ "Instructure logo": "Instructure logo",
+ "@Instructure logo": {
+ "description": "Semantics label for the Instructure logo on the about page",
+ "type": "text",
+ "placeholders_order": [],
+ "placeholders": {}
}
}
\ No newline at end of file
diff --git a/apps/flutter_parent/lib/l10n/res/intl_es.arb b/apps/flutter_parent/lib/l10n/res/intl_es.arb
index b2ff089429..82a7065d8d 100644
--- a/apps/flutter_parent/lib/l10n/res/intl_es.arb
+++ b/apps/flutter_parent/lib/l10n/res/intl_es.arb
@@ -1,5 +1,5 @@
{
- "@@last_modified": "2023-04-14T11:04:46.988317",
+ "@@last_modified": "2023-08-25T11:04:20.901151",
"alertsLabel": "Alertas",
"@alertsLabel": {
"description": "The label for the Alerts tab",
@@ -2742,5 +2742,12 @@
"type": "text",
"placeholders_order": [],
"placeholders": {}
+ },
+ "Instructure logo": "Logotipo de Instructure",
+ "@Instructure logo": {
+ "description": "Semantics label for the Instructure logo on the about page",
+ "type": "text",
+ "placeholders_order": [],
+ "placeholders": {}
}
}
\ No newline at end of file
diff --git a/apps/flutter_parent/lib/l10n/res/intl_es_ES.arb b/apps/flutter_parent/lib/l10n/res/intl_es_ES.arb
index b539d7c9e3..8e0e5d6820 100644
--- a/apps/flutter_parent/lib/l10n/res/intl_es_ES.arb
+++ b/apps/flutter_parent/lib/l10n/res/intl_es_ES.arb
@@ -1,5 +1,5 @@
{
- "@@last_modified": "2023-04-14T11:04:46.988317",
+ "@@last_modified": "2023-08-25T11:04:20.901151",
"alertsLabel": "Alertas",
"@alertsLabel": {
"description": "The label for the Alerts tab",
@@ -2742,5 +2742,12 @@
"type": "text",
"placeholders_order": [],
"placeholders": {}
+ },
+ "Instructure logo": "Logo de Instructure",
+ "@Instructure logo": {
+ "description": "Semantics label for the Instructure logo on the about page",
+ "type": "text",
+ "placeholders_order": [],
+ "placeholders": {}
}
}
\ No newline at end of file
diff --git a/apps/flutter_parent/lib/l10n/res/intl_fi.arb b/apps/flutter_parent/lib/l10n/res/intl_fi.arb
index aa98e93a86..209d49a70d 100644
--- a/apps/flutter_parent/lib/l10n/res/intl_fi.arb
+++ b/apps/flutter_parent/lib/l10n/res/intl_fi.arb
@@ -1,5 +1,5 @@
{
- "@@last_modified": "2023-04-14T11:04:46.988317",
+ "@@last_modified": "2023-08-25T11:04:20.901151",
"alertsLabel": "Hälytykset",
"@alertsLabel": {
"description": "The label for the Alerts tab",
@@ -2742,5 +2742,12 @@
"type": "text",
"placeholders_order": [],
"placeholders": {}
+ },
+ "Instructure logo": "Instructure-logo",
+ "@Instructure logo": {
+ "description": "Semantics label for the Instructure logo on the about page",
+ "type": "text",
+ "placeholders_order": [],
+ "placeholders": {}
}
}
\ No newline at end of file
diff --git a/apps/flutter_parent/lib/l10n/res/intl_fr.arb b/apps/flutter_parent/lib/l10n/res/intl_fr.arb
index 9d143b26e7..63ef1d3ea6 100644
--- a/apps/flutter_parent/lib/l10n/res/intl_fr.arb
+++ b/apps/flutter_parent/lib/l10n/res/intl_fr.arb
@@ -1,5 +1,5 @@
{
- "@@last_modified": "2023-04-14T11:04:46.988317",
+ "@@last_modified": "2023-08-25T11:04:20.901151",
"alertsLabel": "Alertes",
"@alertsLabel": {
"description": "The label for the Alerts tab",
@@ -2742,5 +2742,12 @@
"type": "text",
"placeholders_order": [],
"placeholders": {}
+ },
+ "Instructure logo": "Logo Instructure",
+ "@Instructure logo": {
+ "description": "Semantics label for the Instructure logo on the about page",
+ "type": "text",
+ "placeholders_order": [],
+ "placeholders": {}
}
}
\ No newline at end of file
diff --git a/apps/flutter_parent/lib/l10n/res/intl_fr_CA.arb b/apps/flutter_parent/lib/l10n/res/intl_fr_CA.arb
index e114361c87..267e9daadc 100644
--- a/apps/flutter_parent/lib/l10n/res/intl_fr_CA.arb
+++ b/apps/flutter_parent/lib/l10n/res/intl_fr_CA.arb
@@ -1,5 +1,5 @@
{
- "@@last_modified": "2023-04-14T11:04:46.988317",
+ "@@last_modified": "2023-08-25T11:04:20.901151",
"alertsLabel": "Alertes",
"@alertsLabel": {
"description": "The label for the Alerts tab",
@@ -2742,5 +2742,12 @@
"type": "text",
"placeholders_order": [],
"placeholders": {}
+ },
+ "Instructure logo": "Logo d’Instructure",
+ "@Instructure logo": {
+ "description": "Semantics label for the Instructure logo on the about page",
+ "type": "text",
+ "placeholders_order": [],
+ "placeholders": {}
}
}
\ No newline at end of file
diff --git a/apps/flutter_parent/lib/l10n/res/intl_ht.arb b/apps/flutter_parent/lib/l10n/res/intl_ht.arb
index b558d309f1..e6dd7ec069 100644
--- a/apps/flutter_parent/lib/l10n/res/intl_ht.arb
+++ b/apps/flutter_parent/lib/l10n/res/intl_ht.arb
@@ -1,5 +1,5 @@
{
- "@@last_modified": "2023-04-14T11:04:46.988317",
+ "@@last_modified": "2023-08-25T11:04:20.901151",
"alertsLabel": "Alèt",
"@alertsLabel": {
"description": "The label for the Alerts tab",
@@ -2742,5 +2742,12 @@
"type": "text",
"placeholders_order": [],
"placeholders": {}
+ },
+ "Instructure logo": "Logo Instructure",
+ "@Instructure logo": {
+ "description": "Semantics label for the Instructure logo on the about page",
+ "type": "text",
+ "placeholders_order": [],
+ "placeholders": {}
}
}
\ No newline at end of file
diff --git a/apps/flutter_parent/lib/l10n/res/intl_id.arb b/apps/flutter_parent/lib/l10n/res/intl_id.arb
new file mode 100644
index 0000000000..8d63ed0338
--- /dev/null
+++ b/apps/flutter_parent/lib/l10n/res/intl_id.arb
@@ -0,0 +1,2670 @@
+{
+ "@@last_modified": "2022-10-28T11:03:07.232972",
+ "alertsLabel": "Peringatan",
+ "@alertsLabel": {
+ "description": "The label for the Alerts tab",
+ "type": "text",
+ "placeholders_order": [],
+ "placeholders": {}
+ },
+ "calendarLabel": "Kalender",
+ "@calendarLabel": {
+ "description": "The label for the Calendar tab",
+ "type": "text",
+ "placeholders_order": [],
+ "placeholders": {}
+ },
+ "coursesLabel": "Kursus",
+ "@coursesLabel": {
+ "description": "The label for the Courses tab",
+ "type": "text",
+ "placeholders_order": [],
+ "placeholders": {}
+ },
+ "No Students": "Tidak Ada Siswa",
+ "@No Students": {
+ "description": "Text for when an observer has no students they are observing",
+ "type": "text",
+ "placeholders_order": [],
+ "placeholders": {}
+ },
+ "Tap to show student selector": "Ketuk untuk menampilkan pemilih siswa",
+ "@Tap to show student selector": {
+ "description": "Semantics label for the area that will show the student selector when tapped",
+ "type": "text",
+ "placeholders_order": [],
+ "placeholders": {}
+ },
+ "Tap to pair with a new student": "Ketuk untuk mem-pairing dengan siswa baru",
+ "@Tap to pair with a new student": {
+ "description": "Semantics label for the add student button in the student selector",
+ "type": "text",
+ "placeholders_order": [],
+ "placeholders": {}
+ },
+ "Tap to select this student": "Ketuk untuk memilih siswa ini",
+ "@Tap to select this student": {
+ "description": "Semantics label on individual students in the student switcher",
+ "type": "text",
+ "placeholders_order": [],
+ "placeholders": {}
+ },
+ "Manage Students": "Kelola Siswa",
+ "@Manage Students": {
+ "description": "Label text for the Manage Students nav drawer button as well as the title for the Manage Students screen",
+ "type": "text",
+ "placeholders_order": [],
+ "placeholders": {}
+ },
+ "Help": "Bantu",
+ "@Help": {
+ "description": "Label text for the help nav drawer button",
+ "type": "text",
+ "placeholders_order": [],
+ "placeholders": {}
+ },
+ "Log Out": "Logout",
+ "@Log Out": {
+ "description": "Label text for the Log Out nav drawer button",
+ "type": "text",
+ "placeholders_order": [],
+ "placeholders": {}
+ },
+ "Switch Users": "Ganti Pengguna",
+ "@Switch Users": {
+ "description": "Label text for the Switch Users nav drawer button",
+ "type": "text",
+ "placeholders_order": [],
+ "placeholders": {}
+ },
+ "appVersion": "v. {version}",
+ "@appVersion": {
+ "description": "App version shown in the navigation drawer",
+ "type": "text",
+ "placeholders_order": [
+ "version"
+ ],
+ "placeholders": {
+ "version": {}
+ }
+ },
+ "Are you sure you want to log out?": "Anda yakin mau logout?",
+ "@Are you sure you want to log out?": {
+ "description": "Confirmation message displayed when the user tries to log out",
+ "type": "text",
+ "placeholders_order": [],
+ "placeholders": {}
+ },
+ "Calendars": "Kalender",
+ "@Calendars": {
+ "description": "Label for button that lets users select which calendars to display",
+ "type": "text",
+ "placeholders_order": [],
+ "placeholders": {}
+ },
+ "nextMonth": "Bulan selanjutnya: {month}",
+ "@nextMonth": {
+ "description": "Label for the button that switches the calendar to the next month",
+ "type": "text",
+ "placeholders_order": [
+ "month"
+ ],
+ "placeholders": {
+ "month": {}
+ }
+ },
+ "previousMonth": "Bulan sebelumnya: {month}",
+ "@previousMonth": {
+ "description": "Label for the button that switches the calendar to the previous month",
+ "type": "text",
+ "placeholders_order": [
+ "month"
+ ],
+ "placeholders": {
+ "month": {}
+ }
+ },
+ "nextWeek": "Minggu selanjutnya mulai {date}",
+ "@nextWeek": {
+ "description": "Label for the button that switches the calendar to the next week",
+ "type": "text",
+ "placeholders_order": [
+ "date"
+ ],
+ "placeholders": {
+ "date": {}
+ }
+ },
+ "previousWeek": "Minggu sebelumnya mulai {date}",
+ "@previousWeek": {
+ "description": "Label for the button that switches the calendar to the previous week",
+ "type": "text",
+ "placeholders_order": [
+ "date"
+ ],
+ "placeholders": {
+ "date": {}
+ }
+ },
+ "selectedMonthLabel": "Bulan dari {month}",
+ "@selectedMonthLabel": {
+ "description": "Accessibility label for the button that expands/collapses the month view",
+ "type": "text",
+ "placeholders_order": [
+ "month"
+ ],
+ "placeholders": {
+ "month": {}
+ }
+ },
+ "expand": "perbesar",
+ "@expand": {
+ "description": "Accessibility label for the on-tap hint for the button that expands/collapses the month view",
+ "type": "text",
+ "placeholders_order": [],
+ "placeholders": {}
+ },
+ "collapse": "perkecil",
+ "@collapse": {
+ "description": "Accessibility label for the on-tap hint for the button that expands/collapses the month view",
+ "type": "text",
+ "placeholders_order": [],
+ "placeholders": {}
+ },
+ "pointsPossible": "{points} poin memungkinkan",
+ "@pointsPossible": {
+ "description": "Screen reader label used for the points possible for an assignment, quiz, etc.",
+ "type": "text",
+ "placeholders_order": [
+ "points"
+ ],
+ "placeholders": {
+ "points": {}
+ }
+ },
+ "No Events Today!": "Tidak Ada Acara Hari Ini!",
+ "@No Events Today!": {
+ "description": "Title displayed when there are no calendar events for the current day",
+ "type": "text",
+ "placeholders_order": [],
+ "placeholders": {}
+ },
+ "It looks like a great day to rest, relax, and recharge.": "Sepertinya hari ini sangat cocok untuk beristirahat, santai, dan menyegarkan diri.",
+ "@It looks like a great day to rest, relax, and recharge.": {
+ "description": "Message displayed when there are no calendar events for the current day",
+ "type": "text",
+ "placeholders_order": [],
+ "placeholders": {}
+ },
+ "There was an error loading your student's calendar": "Terjadi kesalahan saat memuat kalender siswa Anda",
+ "@There was an error loading your student's calendar": {
+ "description": "Message displayed when calendar events could not be loaded for the current student",
+ "type": "text",
+ "placeholders_order": [],
+ "placeholders": {}
+ },
+ "Tap to favorite the courses you want to see on the Calendar. Select up to 10.": "Ketuk untuk memfavoritkan kursus yang Anda ingin lihat di Kalender. Pilih hingga 10.",
+ "@Tap to favorite the courses you want to see on the Calendar. Select up to 10.": {
+ "description": "Description text on calendar filter screen.",
+ "type": "text",
+ "placeholders_order": [],
+ "placeholders": {}
+ },
+ "You may only choose 10 calendars to display": "Anda hanya dapat memilih 10 kalender untuk ditampilkan",
+ "@You may only choose 10 calendars to display": {
+ "description": "Error text when trying to select more than 10 calendars",
+ "type": "text",
+ "placeholders_order": [],
+ "placeholders": {}
+ },
+ "You must select at least one calendar to display": "Anda harus memilih setidaknya satu kalender untuk ditampilkan",
+ "@You must select at least one calendar to display": {
+ "description": "Error text when trying to de-select all calendars",
+ "type": "text",
+ "placeholders_order": [],
+ "placeholders": {}
+ },
+ "Planner Note": "Catatan Planner",
+ "@Planner Note": {
+ "description": "Label used for notes in the planner",
+ "type": "text",
+ "placeholders_order": [],
+ "placeholders": {}
+ },
+ "Go to today": "Pergi ke hari ini",
+ "@Go to today": {
+ "description": "Accessibility label used for the today button in the planner",
+ "type": "text",
+ "placeholders_order": [],
+ "placeholders": {}
+ },
+ "Previous Logins": "Login Sebelumnya",
+ "@Previous Logins": {
+ "description": "Label for the list of previous user logins",
+ "type": "text",
+ "placeholders_order": [],
+ "placeholders": {}
+ },
+ "canvasLogoLabel": "Logo Canvas",
+ "@canvasLogoLabel": {
+ "description": "The semantics label for the Canvas logo",
+ "type": "text",
+ "placeholders_order": [],
+ "placeholders": {}
+ },
+ "findSchool": "Temukan Sekolah",
+ "@findSchool": {
+ "description": "Text for the find-my-school button",
+ "type": "text",
+ "placeholders_order": [],
+ "placeholders": {}
+ },
+ "findAnotherSchool": "Temukan sekolah lain",
+ "@findAnotherSchool": {
+ "description": "Text for the find-another-school button",
+ "type": "text",
+ "placeholders_order": [],
+ "placeholders": {}
+ },
+ "domainSearchInputHint": "Masukkan nama sekolah atau distrik…",
+ "@domainSearchInputHint": {
+ "description": "Input hint for the text box on the domain search screen",
+ "type": "text",
+ "placeholders_order": [],
+ "placeholders": {}
+ },
+ "noDomainResults": "Tidak dapat menemukan sekolah yang cocok dengan \"{query}\"",
+ "@noDomainResults": {
+ "description": "Message shown to users when the domain search query did not return any results",
+ "type": "text",
+ "placeholders_order": [
+ "query"
+ ],
+ "placeholders": {
+ "query": {}
+ }
+ },
+ "domainSearchHelpLabel": "Bagaimana cara menemukan sekolah atau distrik saya?",
+ "@domainSearchHelpLabel": {
+ "description": "Label for the help button on the domain search screen",
+ "type": "text",
+ "placeholders_order": [],
+ "placeholders": {}
+ },
+ "canvasGuides": "Panduan Canvas",
+ "@canvasGuides": {
+ "description": "Proper name for the Canvas Guides. This will be used in the domainSearchHelpBody text and will be highlighted and clickable",
+ "type": "text",
+ "placeholders_order": [],
+ "placeholders": {}
+ },
+ "canvasSupport": "Dukungan Canvas",
+ "@canvasSupport": {
+ "description": "Proper name for Canvas Support. This will be used in the domainSearchHelpBody text and will be highlighted and clickable",
+ "type": "text",
+ "placeholders_order": [],
+ "placeholders": {}
+ },
+ "domainSearchHelpBody": "Cobalah mencari nama sekolah atau distrik yang Anda coba akses, seperti “Smith Private School” atau “Smith County Schools.” Anda juga dapat memasukkan domain Canvas secara langsung, seperti “smith.instructure.com.”\n\nUntuk informasi lain tentang menemukan akun Canvas institusi Anda, Anda dapat mengunjungi {canvasGuides}, menghubungi {canvasSupport}, atau menghubungi sekolah Anda untuk mendapat bantuan.",
+ "@domainSearchHelpBody": {
+ "description": "The body text shown in the help dialog on the domain search screen",
+ "type": "text",
+ "placeholders_order": [
+ "canvasGuides",
+ "canvasSupport"
+ ],
+ "placeholders": {
+ "canvasGuides": {},
+ "canvasSupport": {}
+ }
+ },
+ "Uh oh!": "Uh oh!",
+ "@Uh oh!": {
+ "description": "Title of the screen that shows when a crash has occurred",
+ "type": "text",
+ "placeholders_order": [],
+ "placeholders": {}
+ },
+ "We’re not sure what happened, but it wasn’t good. Contact us if this keeps happening.": "Kami tidak yakin apa yang terjadi, tetapi hal itu tidak baik. Hubungi kami jika ini terus terjadi.",
+ "@We’re not sure what happened, but it wasn’t good. Contact us if this keeps happening.": {
+ "description": "Message shown when a crash has occurred",
+ "type": "text",
+ "placeholders_order": [],
+ "placeholders": {}
+ },
+ "Contact Support": "Hubungi Bagian Dukungan",
+ "@Contact Support": {
+ "description": "Label for the button that allows users to contact support after a crash has occurred",
+ "type": "text",
+ "placeholders_order": [],
+ "placeholders": {}
+ },
+ "View error details": "Lihat detail kesalahan",
+ "@View error details": {
+ "description": "Label for the button that allowed users to view crash details",
+ "type": "text",
+ "placeholders_order": [],
+ "placeholders": {}
+ },
+ "Restart app": "Mulai ulang aplikasi",
+ "@Restart app": {
+ "description": "Label for the button that will restart the entire application",
+ "type": "text",
+ "placeholders_order": [],
+ "placeholders": {}
+ },
+ "Application version": "Versi aplikasi",
+ "@Application version": {
+ "description": "Label for the application version displayed in the crash details",
+ "type": "text",
+ "placeholders_order": [],
+ "placeholders": {}
+ },
+ "Device model": "Model perangkat",
+ "@Device model": {
+ "description": "Label for the device model displayed in the crash details",
+ "type": "text",
+ "placeholders_order": [],
+ "placeholders": {}
+ },
+ "Android OS version": "Versi Android OS",
+ "@Android OS version": {
+ "description": "Label for the Android operating system version displayed in the crash details",
+ "type": "text",
+ "placeholders_order": [],
+ "placeholders": {}
+ },
+ "Full error message": "Pesan kesalahan lengkap",
+ "@Full error message": {
+ "description": "Label for the full error message displayed in the crash details",
+ "type": "text",
+ "placeholders_order": [],
+ "placeholders": {}
+ },
+ "Inbox": "Kotak Masuk",
+ "@Inbox": {
+ "description": "Title for the Inbox screen",
+ "type": "text",
+ "placeholders_order": [],
+ "placeholders": {}
+ },
+ "There was an error loading your inbox messages.": "Terjadi kesalahan saat memuat pesan kotak masuk Anda.",
+ "@There was an error loading your inbox messages.": {
+ "type": "text",
+ "placeholders_order": [],
+ "placeholders": {}
+ },
+ "No Subject": "Tanpa Subjek",
+ "@No Subject": {
+ "description": "Title used for inbox messages that have no subject",
+ "type": "text",
+ "placeholders_order": [],
+ "placeholders": {}
+ },
+ "Unable to fetch courses. Please check your connection and try again.": "Tidak dapat mengambil kursus. Silakan periksa sambungan internet Anda dan coba lagi.",
+ "@Unable to fetch courses. Please check your connection and try again.": {
+ "description": "Message shown when an error occured while loading courses",
+ "type": "text",
+ "placeholders_order": [],
+ "placeholders": {}
+ },
+ "Choose a course to message": "Pilih kursus ke pesan",
+ "@Choose a course to message": {
+ "description": "Header in the course list shown when the user is choosing which course to associate with a new message",
+ "type": "text",
+ "placeholders_order": [],
+ "placeholders": {}
+ },
+ "Inbox Zero": "Nol Kotak Masuk",
+ "@Inbox Zero": {
+ "description": "Title of the message shown when there are no inbox messages",
+ "type": "text",
+ "placeholders_order": [],
+ "placeholders": {}
+ },
+ "You’re all caught up!": "Anda berhasil menyusul!",
+ "@You’re all caught up!": {
+ "description": "Subtitle of the message shown when there are no inbox messages",
+ "type": "text",
+ "placeholders_order": [],
+ "placeholders": {}
+ },
+ "There was an error loading recipients for this course": "Terjadi kesalahan saat memuat penerima untuk kursus ini.",
+ "@There was an error loading recipients for this course": {
+ "description": "Message shown when attempting to create a new message but the recipients list failed to load",
+ "type": "text",
+ "placeholders_order": [],
+ "placeholders": {}
+ },
+ "Unable to send message. Check your connection and try again.": "Tidak dapat mengirim pesan. Periksa koneksi Anda dan coba lagi.",
+ "@Unable to send message. Check your connection and try again.": {
+ "description": "Message show when there was an error creating or sending a new message",
+ "type": "text",
+ "placeholders_order": [],
+ "placeholders": {}
+ },
+ "Unsaved changes": "Perubahan belum disimpan",
+ "@Unsaved changes": {
+ "description": "Title of the dialog shown when the user tries to leave with unsaved changes",
+ "type": "text",
+ "placeholders_order": [],
+ "placeholders": {}
+ },
+ "Are you sure you wish to close this page? Your unsent message will be lost.": "Anda yakin mau menutup halaman ini? Pesan Anda yang belum dikirim akan hilang.",
+ "@Are you sure you wish to close this page? Your unsent message will be lost.": {
+ "description": "Body text of the dialog shown when the user tries leave with unsaved changes",
+ "type": "text",
+ "placeholders_order": [],
+ "placeholders": {}
+ },
+ "New message": "Pesan baru",
+ "@New message": {
+ "description": "Title of the new-message screen",
+ "type": "text",
+ "placeholders_order": [],
+ "placeholders": {}
+ },
+ "Add attachment": "Tambah lampiran",
+ "@Add attachment": {
+ "description": "Tooltip for the add-attachment button in the new-message screen",
+ "type": "text",
+ "placeholders_order": [],
+ "placeholders": {}
+ },
+ "Send message": "Kirim pesan",
+ "@Send message": {
+ "description": "Tooltip for the send-message button in the new-message screen",
+ "type": "text",
+ "placeholders_order": [],
+ "placeholders": {}
+ },
+ "Select recipients": "Pilih penerima",
+ "@Select recipients": {
+ "description": "Tooltip for the button that allows users to select message recipients",
+ "type": "text",
+ "placeholders_order": [],
+ "placeholders": {}
+ },
+ "No recipients selected": "Penerima tidak dipilih",
+ "@No recipients selected": {
+ "description": "Hint displayed when the user has not selected any message recipients",
+ "type": "text",
+ "placeholders_order": [],
+ "placeholders": {}
+ },
+ "Message subject": "Subjek pesan",
+ "@Message subject": {
+ "description": "Hint text displayed in the input field for the message subject",
+ "type": "text",
+ "placeholders_order": [],
+ "placeholders": {}
+ },
+ "Message": "Pesan",
+ "@Message": {
+ "description": "Hint text displayed in the input field for the message body",
+ "type": "text",
+ "placeholders_order": [],
+ "placeholders": {}
+ },
+ "Recipients": "Penerima",
+ "@Recipients": {
+ "description": "Label for message recipients",
+ "type": "text",
+ "placeholders_order": [],
+ "placeholders": {}
+ },
+ "plusRecipientCount": "+{count}",
+ "@plusRecipientCount": {
+ "description": "Shows the number of recipients that are selected but not displayed on screen.",
+ "type": "text",
+ "placeholders_order": [
+ "count"
+ ],
+ "placeholders": {
+ "count": {
+ "example": 5
+ }
+ }
+ },
+ "Failed. Tap for options.": "Gagal. Ketuk untuk opsi.",
+ "@Failed. Tap for options.": {
+ "description": "Short message shown on a message attachment when uploading has failed",
+ "type": "text",
+ "placeholders_order": [],
+ "placeholders": {}
+ },
+ "courseForWhom": "untuk {studentShortName}",
+ "@courseForWhom": {
+ "description": "Describes for whom a course is for (i.e. for Bill)",
+ "type": "text",
+ "placeholders_order": [
+ "studentShortName"
+ ],
+ "placeholders": {
+ "studentShortName": {}
+ }
+ },
+ "messageLinkPostscript": "Tentang: {studentName}, {linkUrl}",
+ "@messageLinkPostscript": {
+ "description": "A postscript appended to new messages that clarifies which student is the subject of the message and also includes a URL for the related Canvas component (course, assignment, event, etc).",
+ "type": "text",
+ "placeholders_order": [
+ "studentName",
+ "linkUrl"
+ ],
+ "placeholders": {
+ "studentName": {},
+ "linkUrl": {}
+ }
+ },
+ "There was an error loading this conversation": "Terjadi kesalahan saat memuat percakapan ini",
+ "@There was an error loading this conversation": {
+ "description": "Message shown when a conversation fails to load",
+ "type": "text",
+ "placeholders_order": [],
+ "placeholders": {}
+ },
+ "Reply": "Balas",
+ "@Reply": {
+ "description": "Button label for replying to a conversation",
+ "type": "text",
+ "placeholders_order": [],
+ "placeholders": {}
+ },
+ "Reply All": "Balas Semua",
+ "@Reply All": {
+ "description": "Button label for replying to all conversation participants",
+ "type": "text",
+ "placeholders_order": [],
+ "placeholders": {}
+ },
+ "Unknown User": "Pengguna Tidak Dikenal",
+ "@Unknown User": {
+ "description": "Label used where the user name is not known",
+ "type": "text",
+ "placeholders_order": [],
+ "placeholders": {}
+ },
+ "me": "saya",
+ "@me": {
+ "description": "First-person pronoun (i.e. 'me') that will be used in message author info, e.g. 'Me to 4 others' or 'Jon Snow to me'",
+ "type": "text",
+ "placeholders_order": [],
+ "placeholders": {}
+ },
+ "authorToRecipient": "{authorName} hingga {recipientName}",
+ "@authorToRecipient": {
+ "description": "Author info for a single-recipient message; includes both the author name and the recipient name.",
+ "type": "text",
+ "placeholders_order": [
+ "authorName",
+ "recipientName"
+ ],
+ "placeholders": {
+ "authorName": {},
+ "recipientName": {}
+ }
+ },
+ "authorToNOthers": "{howMany,plural, =1{{authorName} ke 1 lainnya}other{{authorName} ke {howMany} lainnya}}",
+ "@authorToNOthers": {
+ "description": "Author info for a mutli-recipient message; includes the author name and the number of recipients",
+ "type": "text",
+ "placeholders_order": [
+ "authorName",
+ "howMany"
+ ],
+ "placeholders": {
+ "authorName": {},
+ "howMany": {}
+ }
+ },
+ "authorToRecipientAndNOthers": "{howMany,plural, =1{{authorName} ke {recipientName} & 1 lainnya}other{{authorName} ke {recipientName} & {howMany} lainnya}}",
+ "@authorToRecipientAndNOthers": {
+ "description": "Author info for a multi-recipient message; includes the author name, one recipient name, and the number of other recipients",
+ "type": "text",
+ "placeholders_order": [
+ "authorName",
+ "recipientName",
+ "howMany"
+ ],
+ "placeholders": {
+ "authorName": {},
+ "recipientName": {},
+ "howMany": {}
+ }
+ },
+ "Download": "Unduh",
+ "@Download": {
+ "description": "Label for the button that will begin downloading a file",
+ "type": "text",
+ "placeholders_order": [],
+ "placeholders": {}
+ },
+ "Open with another app": "Buka dengan aplikasi lain",
+ "@Open with another app": {
+ "description": "Label for the button that will allow users to open a file with another app",
+ "type": "text",
+ "placeholders_order": [],
+ "placeholders": {}
+ },
+ "There are no installed applications that can open this file": "Tidak ada aplikasi terinstal yang dapat membuka file ini",
+ "@There are no installed applications that can open this file": {
+ "type": "text",
+ "placeholders_order": [],
+ "placeholders": {}
+ },
+ "Unsupported File": "File Tidak Didukung",
+ "@Unsupported File": {
+ "type": "text",
+ "placeholders_order": [],
+ "placeholders": {}
+ },
+ "This file is unsupported and can’t be viewed through the app": "File ini tidak didukung dan tidak dapat dilihat melalui aplikasi",
+ "@This file is unsupported and can’t be viewed through the app": {
+ "type": "text",
+ "placeholders_order": [],
+ "placeholders": {}
+ },
+ "Unable to play this media file": "Tidak dapat memutar file media ini",
+ "@Unable to play this media file": {
+ "description": "Message shown when audio or video media could not be played",
+ "type": "text",
+ "placeholders_order": [],
+ "placeholders": {}
+ },
+ "Unable to load this image": "Tidak dapat memuat gambar ini",
+ "@Unable to load this image": {
+ "description": "Message shown when an image file could not be loaded or displayed",
+ "type": "text",
+ "placeholders_order": [],
+ "placeholders": {}
+ },
+ "There was an error loading this file": "Terjadi kesalahan saat memuat file ini",
+ "@There was an error loading this file": {
+ "description": "Message shown when a file could not be loaded or displayed",
+ "type": "text",
+ "placeholders_order": [],
+ "placeholders": {}
+ },
+ "No Courses": "Tidak Ada Kursus",
+ "@No Courses": {
+ "description": "Title for having no courses",
+ "type": "text",
+ "placeholders_order": [],
+ "placeholders": {}
+ },
+ "Your student’s courses might not be published yet.": "Kursus siswa Anda mungkin belum diterbitkan.",
+ "@Your student’s courses might not be published yet.": {
+ "description": "Message for having no courses",
+ "type": "text",
+ "placeholders_order": [],
+ "placeholders": {}
+ },
+ "There was an error loading your student’s courses.": "Terjadi kesalahan ketika memuat kursus siswa Anda.",
+ "@There was an error loading your student’s courses.": {
+ "description": "Message displayed when the list of student courses could not be loaded",
+ "type": "text",
+ "placeholders_order": [],
+ "placeholders": {}
+ },
+ "No Grade": "Tanpa Nilai",
+ "@No Grade": {
+ "description": "Message shown when there is currently no grade available for a course",
+ "type": "text",
+ "placeholders_order": [],
+ "placeholders": {}
+ },
+ "Filter by": "Filter menurut",
+ "@Filter by": {
+ "description": "Title for list of terms to filter grades by",
+ "type": "text",
+ "placeholders_order": [],
+ "placeholders": {}
+ },
+ "Grades": "Nilai",
+ "@Grades": {
+ "description": "Label for the \"Grades\" tab in course details",
+ "type": "text",
+ "placeholders_order": [],
+ "placeholders": {}
+ },
+ "Syllabus": "Silabus",
+ "@Syllabus": {
+ "description": "Label for the \"Syllabus\" tab in course details",
+ "type": "text",
+ "placeholders_order": [],
+ "placeholders": {}
+ },
+ "Front Page": "Halaman Depan",
+ "@Front Page": {
+ "description": "Label for the \"Front Page\" tab in course details",
+ "type": "text",
+ "placeholders_order": [],
+ "placeholders": {}
+ },
+ "Summary": "Rangkuman",
+ "@Summary": {
+ "description": "Label for the \"Summary\" tab in course details",
+ "type": "text",
+ "placeholders_order": [],
+ "placeholders": {}
+ },
+ "Send a message about this course": "Kirim pesan tentang kursus ini",
+ "@Send a message about this course": {
+ "description": "Accessibility hint for the course messaage floating action button",
+ "type": "text",
+ "placeholders_order": [],
+ "placeholders": {}
+ },
+ "Total Grade": "Nilai Total",
+ "@Total Grade": {
+ "description": "Label for the total grade in the course",
+ "type": "text",
+ "placeholders_order": [],
+ "placeholders": {}
+ },
+ "Graded": "Dinilai",
+ "@Graded": {
+ "description": "Label for assignments that have been graded",
+ "type": "text",
+ "placeholders_order": [],
+ "placeholders": {}
+ },
+ "Submitted": "Diserahkan",
+ "@Submitted": {
+ "description": "Label for assignments that have been submitted",
+ "type": "text",
+ "placeholders_order": [],
+ "placeholders": {}
+ },
+ "Not Submitted": "Belum Diserahkan",
+ "@Not Submitted": {
+ "description": "Label for assignments that have not been submitted",
+ "type": "text",
+ "placeholders_order": [],
+ "placeholders": {}
+ },
+ "Late": "Terlambat",
+ "@Late": {
+ "description": "Label for assignments that have been marked late or submitted late",
+ "type": "text",
+ "placeholders_order": [],
+ "placeholders": {}
+ },
+ "Missing": "Tidak Ada",
+ "@Missing": {
+ "description": "Label for assignments that have been marked missing or are not submitted and past the due date",
+ "type": "text",
+ "placeholders_order": [],
+ "placeholders": {}
+ },
+ "-": "-",
+ "@-": {
+ "description": "Value representing no score for student submission",
+ "type": "text",
+ "placeholders_order": [],
+ "placeholders": {}
+ },
+ "All Grading Periods": "Semua Periode Penilaian",
+ "@All Grading Periods": {
+ "description": "Label for selecting all grading periods",
+ "type": "text",
+ "placeholders_order": [],
+ "placeholders": {}
+ },
+ "No Assignments": "Tidak Ada Tugas",
+ "@No Assignments": {
+ "description": "Title for the no assignments message",
+ "type": "text",
+ "placeholders_order": [],
+ "placeholders": {}
+ },
+ "It looks like assignments haven't been created in this space yet.": "Sepertinya tugas belum dibuat di ruang ini.",
+ "@It looks like assignments haven't been created in this space yet.": {
+ "description": "Message for no assignments",
+ "type": "text",
+ "placeholders_order": [],
+ "placeholders": {}
+ },
+ "There was an error loading the summary details for this course.": "Terjadi kesalahan saat memuat detail rangkuman untuk kursus ini.",
+ "@There was an error loading the summary details for this course.": {
+ "description": "Message shown when the course summary could not be loaded",
+ "type": "text",
+ "placeholders_order": [],
+ "placeholders": {}
+ },
+ "No Summary": "Tidak Ada Rangkuman",
+ "@No Summary": {
+ "description": "Title displayed when there are no items in the course summary",
+ "type": "text",
+ "placeholders_order": [],
+ "placeholders": {}
+ },
+ "This course does not have any assignments or calendar events yet.": "Kursus in belum memiliki tugas atau acara kalender.",
+ "@This course does not have any assignments or calendar events yet.": {
+ "description": "Message displayed when there are no items in the course summary",
+ "type": "text",
+ "placeholders_order": [],
+ "placeholders": {}
+ },
+ "gradeFormatScoreOutOfPointsPossible": "{score} / {pointsPossible}",
+ "@gradeFormatScoreOutOfPointsPossible": {
+ "description": "Formatted string for a student score out of the points possible",
+ "type": "text",
+ "placeholders_order": [
+ "score",
+ "pointsPossible"
+ ],
+ "placeholders": {
+ "score": {},
+ "pointsPossible": {}
+ }
+ },
+ "contentDescriptionScoreOutOfPointsPossible": "{score} dari {pointsPossible} poin",
+ "@contentDescriptionScoreOutOfPointsPossible": {
+ "description": "Formatted string for a student score out of the points possible",
+ "type": "text",
+ "placeholders_order": [
+ "score",
+ "pointsPossible"
+ ],
+ "placeholders": {
+ "score": {},
+ "pointsPossible": {}
+ }
+ },
+ "gradesSubjectMessage": "Tentang: {studentName}, Nilai",
+ "@gradesSubjectMessage": {
+ "description": "The subject line for a message to a teacher regarding a student's grades",
+ "type": "text",
+ "placeholders_order": [
+ "studentName"
+ ],
+ "placeholders": {
+ "studentName": {}
+ }
+ },
+ "syllabusSubjectMessage": "Tentang: {studentName}, Silabus",
+ "@syllabusSubjectMessage": {
+ "description": "The subject line for a message to a teacher regarding a course syllabus",
+ "type": "text",
+ "placeholders_order": [
+ "studentName"
+ ],
+ "placeholders": {
+ "studentName": {}
+ }
+ },
+ "frontPageSubjectMessage": "Tentang: {studentName}, Halaman Depan",
+ "@frontPageSubjectMessage": {
+ "description": "The subject line for a message to a teacher regarding a course front page",
+ "type": "text",
+ "placeholders_order": [
+ "studentName"
+ ],
+ "placeholders": {
+ "studentName": {}
+ }
+ },
+ "assignmentSubjectMessage": "Tentang: {studentName}, Tugas - {assignmentName}",
+ "@assignmentSubjectMessage": {
+ "description": "The subject line for a message to a teacher regarding a student's assignment",
+ "type": "text",
+ "placeholders_order": [
+ "studentName",
+ "assignmentName"
+ ],
+ "placeholders": {
+ "studentName": {},
+ "assignmentName": {}
+ }
+ },
+ "eventSubjectMessage": "Tentang: {studentName}, Acara - {eventTitle}",
+ "@eventSubjectMessage": {
+ "description": "The subject line for a message to a teacher regarding a calendar event",
+ "type": "text",
+ "placeholders_order": [
+ "studentName",
+ "eventTitle"
+ ],
+ "placeholders": {
+ "studentName": {},
+ "eventTitle": {}
+ }
+ },
+ "There is no page information available.": "Informasi halaman tidak tersedia.",
+ "@There is no page information available.": {
+ "description": "Description for when no page information is available",
+ "type": "text",
+ "placeholders_order": [],
+ "placeholders": {}
+ },
+ "Assignment Details": "Detail Tugas",
+ "@Assignment Details": {
+ "description": "Title for the page that shows details for an assignment",
+ "type": "text",
+ "placeholders_order": [],
+ "placeholders": {}
+ },
+ "assignmentTotalPoints": "{points} poin",
+ "@assignmentTotalPoints": {
+ "description": "Label used for the total points the assignment is worth",
+ "type": "text",
+ "placeholders_order": [
+ "points"
+ ],
+ "placeholders": {
+ "points": {}
+ }
+ },
+ "assignmentTotalPointsAccessible": "{points} poin",
+ "@assignmentTotalPointsAccessible": {
+ "description": "Screen reader label used for the total points the assignment is worth",
+ "type": "text",
+ "placeholders_order": [
+ "points"
+ ],
+ "placeholders": {
+ "points": {}
+ }
+ },
+ "Due": "Batas",
+ "@Due": {
+ "description": "Label for an assignment due date",
+ "type": "text",
+ "placeholders_order": [],
+ "placeholders": {}
+ },
+ "Grade": "Kelas",
+ "@Grade": {
+ "description": "Label for the section that displays an assignment's grade",
+ "type": "text",
+ "placeholders_order": [],
+ "placeholders": {}
+ },
+ "Locked": "Terkunci",
+ "@Locked": {
+ "description": "Label for when an assignment is locked",
+ "type": "text",
+ "placeholders_order": [],
+ "placeholders": {}
+ },
+ "assignmentLockedModule": "Tugas ini dikunci oleh modul \"{moduleName}\".",
+ "@assignmentLockedModule": {
+ "description": "The locked description when an assignment is locked by a module",
+ "type": "text",
+ "placeholders_order": [
+ "moduleName"
+ ],
+ "placeholders": {
+ "moduleName": {}
+ }
+ },
+ "Remind Me": "Ingatkan Saya",
+ "@Remind Me": {
+ "description": "Label for the row to set reminders",
+ "type": "text",
+ "placeholders_order": [],
+ "placeholders": {}
+ },
+ "Set a date and time to be notified of this specific assignment.": "Atur tanggal dan waktu untuk diberi tahu tugas spesifik ini.",
+ "@Set a date and time to be notified of this specific assignment.": {
+ "description": "Description for row to set reminders",
+ "type": "text",
+ "placeholders_order": [],
+ "placeholders": {}
+ },
+ "You will be notified about this assignment on…": "Anda akan diberi tahu tentang tugas ini pada…",
+ "@You will be notified about this assignment on…": {
+ "description": "Description for when a reminder is set",
+ "type": "text",
+ "placeholders_order": [],
+ "placeholders": {}
+ },
+ "Instructions": "Petunjuk",
+ "@Instructions": {
+ "description": "Label for the description of the assignment when it has quiz instructions",
+ "type": "text",
+ "placeholders_order": [],
+ "placeholders": {}
+ },
+ "Send a message about this assignment": "Kirim pesan tentang tugas ini",
+ "@Send a message about this assignment": {
+ "description": "Accessibility hint for the assignment messaage floating action button",
+ "type": "text",
+ "placeholders_order": [],
+ "placeholders": {}
+ },
+ "This app is not authorized for use.": "Aplikasi ini tidak diizinkan untuk digunakan.",
+ "@This app is not authorized for use.": {
+ "description": "The error shown when the app being used is not verified by Canvas",
+ "type": "text",
+ "placeholders_order": [],
+ "placeholders": {}
+ },
+ "The server you entered is not authorized for this app.": "Server yang Anda masukkan tidak diizinkan untuk aplikasi ini.",
+ "@The server you entered is not authorized for this app.": {
+ "description": "The error shown when the desired login domain is not verified by Canvas",
+ "type": "text",
+ "placeholders_order": [],
+ "placeholders": {}
+ },
+ "The user agent for this app is not authorized.": "Agen pengguna untuk aplikasi ini tidak diizinkan.",
+ "@The user agent for this app is not authorized.": {
+ "description": "The error shown when the user agent during verification is not verified by Canvas",
+ "type": "text",
+ "placeholders_order": [],
+ "placeholders": {}
+ },
+ "We were unable to verify the server for use with this app.": "Kami tidak dapat memverifikasi server untuk digunakan bersama aplikasi ini.",
+ "@We were unable to verify the server for use with this app.": {
+ "description": "The generic error shown when we are unable to verify with Canvas",
+ "type": "text",
+ "placeholders_order": [],
+ "placeholders": {}
+ },
+ "Reminders": "Pengingat",
+ "@Reminders": {
+ "description": "Name of the system notification channel for assignment and event reminders",
+ "type": "text",
+ "placeholders_order": [],
+ "placeholders": {}
+ },
+ "Notifications for reminders about assignments and calendar events": "Notifikasi untuk pengingat tentang tugas dan acara kalender",
+ "@Notifications for reminders about assignments and calendar events": {
+ "description": "Description of the system notification channel for assignment and event reminders",
+ "type": "text",
+ "placeholders_order": [],
+ "placeholders": {}
+ },
+ "Reminders have changed!": "Pengingat sudah berubah!",
+ "@Reminders have changed!": {
+ "description": "Title of the dialog shown when the user needs to update their reminders",
+ "type": "text",
+ "placeholders_order": [],
+ "placeholders": {}
+ },
+ "In order to provide you with a better experience, we have updated how reminders work. You can add new reminders by viewing an assignment or calendar event and tapping the switch under the \"Remind Me\" section.\n\nBe aware that any reminders created with older versions of this app will not be compatible with the new changes and you will need to create them again.": "Untuk memberi Anda pengalaman yang lebih baik, kami telah memperbarui cara kerja pengingat. Anda dapat menambah pengingat dengan melihat tugas atau acara kalender dan mengetuk sakelar di bawah bagian \"Ingatkan Saya\".\n\nMohon pahami bahwa segala pengingat yang dibuat dengan versi aplikasi yang lebih tua tidak akan kompatibel dengan perubahan baru dan Anda perlu membuatnya lagi.",
+ "@In order to provide you with a better experience, we have updated how reminders work. You can add new reminders by viewing an assignment or calendar event and tapping the switch under the \"Remind Me\" section.\n\nBe aware that any reminders created with older versions of this app will not be compatible with the new changes and you will need to create them again.": {
+ "type": "text",
+ "placeholders_order": [],
+ "placeholders": {}
+ },
+ "Not a parent?": "Bukan orang tua?",
+ "@Not a parent?": {
+ "description": "Title for the screen that shows when the user is not observing any students",
+ "type": "text",
+ "placeholders_order": [],
+ "placeholders": {}
+ },
+ "We couldn't find any students associated with this account": "Kami tidak dapat menemukan siswa apa pun yang terkait dengan akun ini",
+ "@We couldn't find any students associated with this account": {
+ "description": "Subtitle for the screen that shows when the user is not observing any students",
+ "type": "text",
+ "placeholders_order": [],
+ "placeholders": {}
+ },
+ "Are you a student or teacher?": "Anda siswa atau guru?",
+ "@Are you a student or teacher?": {
+ "description": "Label for button that will show users the option to view other Canvas apps in the Play Store",
+ "type": "text",
+ "placeholders_order": [],
+ "placeholders": {}
+ },
+ "One of our other apps might be a better fit. Tap one to visit the Play Store.": "Salah satu app lain mungkin lebih cocok. Ketuk untuk membuka App Store.",
+ "@One of our other apps might be a better fit. Tap one to visit the Play Store.": {
+ "description": "Description of options to view other Canvas apps in the Play Store",
+ "type": "text",
+ "placeholders_order": [],
+ "placeholders": {}
+ },
+ "Return to Login": "Kembali ke Login",
+ "@Return to Login": {
+ "description": "Label for the button that returns the user to the login screen",
+ "type": "text",
+ "placeholders_order": [],
+ "placeholders": {}
+ },
+ "STUDENT": "SISWA",
+ "@STUDENT": {
+ "description": "The \"student\" portion of the \"Canvas Student\" app name, in all caps. \"Canvas\" is excluded in this context as it will be displayed to the user as a wordmark image",
+ "type": "text",
+ "placeholders_order": [],
+ "placeholders": {}
+ },
+ "TEACHER": "GURU",
+ "@TEACHER": {
+ "description": "The \"teacher\" portion of the \"Canvas Teacher\" app name, in all caps. \"Canvas\" is excluded in this context as it will be displayed to the user as a wordmark image",
+ "type": "text",
+ "placeholders_order": [],
+ "placeholders": {}
+ },
+ "Canvas Student": "Canvas Student",
+ "@Canvas Student": {
+ "description": "The name of the Canvas Student app. Only \"Student\" should be translated as \"Canvas\" is a brand name in this context and should not be translated.",
+ "type": "text",
+ "placeholders_order": [],
+ "placeholders": {}
+ },
+ "Canvas Teacher": "Canvas Teacher",
+ "@Canvas Teacher": {
+ "description": "The name of the Canvas Teacher app. Only \"Teacher\" should be translated as \"Canvas\" is a brand name in this context and should not be translated.",
+ "type": "text",
+ "placeholders_order": [],
+ "placeholders": {}
+ },
+ "No Alerts": "Tanpa Peringatan",
+ "@No Alerts": {
+ "description": "The title for the empty message to show to users when there are no alerts for the student.",
+ "type": "text",
+ "placeholders_order": [],
+ "placeholders": {}
+ },
+ "There’s nothing to be notified of yet.": "Belum ada notifikasi untuk apa pun.",
+ "@There’s nothing to be notified of yet.": {
+ "description": "The empty message to show to users when there are no alerts for the student.",
+ "type": "text",
+ "placeholders_order": [],
+ "placeholders": {}
+ },
+ "dismissAlertLabel": "Singkirkan {alertTitle}",
+ "@dismissAlertLabel": {
+ "description": "Accessibility label to dismiss an alert",
+ "type": "text",
+ "placeholders_order": [
+ "alertTitle"
+ ],
+ "placeholders": {
+ "alertTitle": {}
+ }
+ },
+ "Course Announcement": "Pengumuman Kursus",
+ "@Course Announcement": {
+ "description": "Title for alerts when there is a course announcement",
+ "type": "text",
+ "placeholders_order": [],
+ "placeholders": {}
+ },
+ "Institution Announcement": "Pengumuman Lembaga",
+ "@Institution Announcement": {
+ "description": "Title for alerts when there is an institution announcement",
+ "type": "text",
+ "placeholders_order": [],
+ "placeholders": {}
+ },
+ "assignmentGradeAboveThreshold": "Nilai Tugas Di Atas {threshold}",
+ "@assignmentGradeAboveThreshold": {
+ "description": "Title for alerts when an assignment grade is above the threshold value",
+ "type": "text",
+ "placeholders_order": [
+ "threshold"
+ ],
+ "placeholders": {
+ "threshold": {}
+ }
+ },
+ "assignmentGradeBelowThreshold": "Nilai Tugas Di Bawah {threshold}",
+ "@assignmentGradeBelowThreshold": {
+ "description": "Title for alerts when an assignment grade is below the threshold value",
+ "type": "text",
+ "placeholders_order": [
+ "threshold"
+ ],
+ "placeholders": {
+ "threshold": {}
+ }
+ },
+ "courseGradeAboveThreshold": "Nilai Kursus Di Atas {threshold}",
+ "@courseGradeAboveThreshold": {
+ "description": "Title for alerts when a course grade is above the threshold value",
+ "type": "text",
+ "placeholders_order": [
+ "threshold"
+ ],
+ "placeholders": {
+ "threshold": {}
+ }
+ },
+ "courseGradeBelowThreshold": "Nilai Kursus Di Bawah {threshold}",
+ "@courseGradeBelowThreshold": {
+ "description": "Title for alerts when a course grade is below the threshold value",
+ "type": "text",
+ "placeholders_order": [
+ "threshold"
+ ],
+ "placeholders": {
+ "threshold": {}
+ }
+ },
+ "Settings": "Pengaturan",
+ "@Settings": {
+ "description": "Title for the settings screen",
+ "type": "text",
+ "placeholders_order": [],
+ "placeholders": {}
+ },
+ "Theme": "Tema",
+ "@Theme": {
+ "description": "Label for the light/dark theme section in the settings page",
+ "type": "text",
+ "placeholders_order": [],
+ "placeholders": {}
+ },
+ "Dark Mode": "Mode Gelap",
+ "@Dark Mode": {
+ "description": "Label for the button that enables dark mode",
+ "type": "text",
+ "placeholders_order": [],
+ "placeholders": {}
+ },
+ "Light Mode": "Mode Terang",
+ "@Light Mode": {
+ "description": "Label for the button that enables light mode",
+ "type": "text",
+ "placeholders_order": [],
+ "placeholders": {}
+ },
+ "High Contrast Mode": "Mode Kontras Tinggi",
+ "@High Contrast Mode": {
+ "description": "Label for the switch that toggles high contrast mode",
+ "type": "text",
+ "placeholders_order": [],
+ "placeholders": {}
+ },
+ "Use Dark Theme in Web Content": "Gunakan Tema Gelap di Konten Web",
+ "@Use Dark Theme in Web Content": {
+ "description": "Label for the switch that toggles dark mode for webviews",
+ "type": "text",
+ "placeholders_order": [],
+ "placeholders": {}
+ },
+ "Appearance": "Tampilan",
+ "@Appearance": {
+ "description": "Label for the appearance section in the settings page",
+ "type": "text",
+ "placeholders_order": [],
+ "placeholders": {}
+ },
+ "Successfully submitted!": "Berhasil diserahkan!",
+ "@Successfully submitted!": {
+ "description": "Title displayed in the grade cell for an assignment that has been submitted",
+ "type": "text",
+ "placeholders_order": [],
+ "placeholders": {}
+ },
+ "submissionStatusSuccessSubtitle": "Tugas ini diserahkan pada {date} pukul {time} dan menunggu untuk dinilai",
+ "@submissionStatusSuccessSubtitle": {
+ "description": "Subtitle displayed in the grade cell for an assignment that has been submitted and is awaiting a grade",
+ "type": "text",
+ "placeholders_order": [
+ "date",
+ "time"
+ ],
+ "placeholders": {
+ "date": {},
+ "time": {}
+ }
+ },
+ "outOfPoints": "{howMany,plural, =1{Dari 1 poin}other{Dari {points} poin}}",
+ "@outOfPoints": {
+ "description": "Description for an assignment grade that has points without a current scoroe",
+ "type": "text",
+ "placeholders_order": [
+ "points",
+ "howMany"
+ ],
+ "placeholders": {
+ "points": {},
+ "howMany": {}
+ }
+ },
+ "Excused": "Dibolehkan",
+ "@Excused": {
+ "description": "Grading status for an assignment marked as excused",
+ "type": "text",
+ "placeholders_order": [],
+ "placeholders": {}
+ },
+ "Complete": "Lengkap",
+ "@Complete": {
+ "description": "Grading status for an assignment marked as complete",
+ "type": "text",
+ "placeholders_order": [],
+ "placeholders": {}
+ },
+ "Incomplete": "Tidak lengkap",
+ "@Incomplete": {
+ "description": "Grading status for an assignment marked as incomplete",
+ "type": "text",
+ "placeholders_order": [],
+ "placeholders": {}
+ },
+ "minus": "minus",
+ "@minus": {
+ "description": "Screen reader-friendly replacement for the \"-\" character in letter grades like \"A-\"",
+ "type": "text",
+ "placeholders_order": [],
+ "placeholders": {}
+ },
+ "latePenalty": "Penalti terlambat ({pointsLost})",
+ "@latePenalty": {
+ "description": "Text displayed when a late penalty has been applied to the assignment",
+ "type": "text",
+ "placeholders_order": [
+ "pointsLost"
+ ],
+ "placeholders": {
+ "pointsLost": {}
+ }
+ },
+ "finalGrade": "Nilai Final: {grade}",
+ "@finalGrade": {
+ "description": "Text that displays the final grade of an assignment",
+ "type": "text",
+ "placeholders_order": [
+ "grade"
+ ],
+ "placeholders": {
+ "grade": {}
+ }
+ },
+ "Alert Settings": "Pengaturan Peringatan",
+ "@Alert Settings": {
+ "type": "text",
+ "placeholders_order": [],
+ "placeholders": {}
+ },
+ "Alert me when…": "Ingatkan saya ketika...",
+ "@Alert me when…": {
+ "description": "Header for the screen where the observer chooses the thresholds that will determine when they receive alerts (e.g. when an assignment is graded below 70%)",
+ "type": "text",
+ "placeholders_order": [],
+ "placeholders": {}
+ },
+ "Course grade below": "Nilai kursus di bawah",
+ "@Course grade below": {
+ "description": "Label describing the threshold for when the course grade is below a certain percentage",
+ "type": "text",
+ "placeholders_order": [],
+ "placeholders": {}
+ },
+ "Course grade above": "Nilai kursus di atas",
+ "@Course grade above": {
+ "description": "Label describing the threshold for when the course grade is above a certain percentage",
+ "type": "text",
+ "placeholders_order": [],
+ "placeholders": {}
+ },
+ "Assignment missing": "Tugas tidak ada",
+ "@Assignment missing": {
+ "type": "text",
+ "placeholders_order": [],
+ "placeholders": {}
+ },
+ "Assignment grade below": "Nilai tugas di bawah",
+ "@Assignment grade below": {
+ "description": "Label describing the threshold for when an assignment is graded below a certain percentage",
+ "type": "text",
+ "placeholders_order": [],
+ "placeholders": {}
+ },
+ "Assignment grade above": "Nilai tugas di atas",
+ "@Assignment grade above": {
+ "description": "Label describing the threshold for when an assignment is graded above a certain percentage",
+ "type": "text",
+ "placeholders_order": [],
+ "placeholders": {}
+ },
+ "Course Announcements": "Pengumuman Kursus",
+ "@Course Announcements": {
+ "type": "text",
+ "placeholders_order": [],
+ "placeholders": {}
+ },
+ "Institution Announcements": "Pengumuman Institusi",
+ "@Institution Announcements": {
+ "type": "text",
+ "placeholders_order": [],
+ "placeholders": {}
+ },
+ "Never": "Tidak Pernah",
+ "@Never": {
+ "description": "Indication that tells the user they will not receive alert notifications of a specific kind",
+ "type": "text",
+ "placeholders_order": [],
+ "placeholders": {}
+ },
+ "Grade percentage": "Persentase nilai",
+ "@Grade percentage": {
+ "type": "text",
+ "placeholders_order": [],
+ "placeholders": {}
+ },
+ "There was an error loading your student's alerts.": "Terjadi kesalahan ketika memuat peringatan siswa Anda.",
+ "@There was an error loading your student's alerts.": {
+ "type": "text",
+ "placeholders_order": [],
+ "placeholders": {}
+ },
+ "Must be below 100": "Harus di bawah 100",
+ "@Must be below 100": {
+ "type": "text",
+ "placeholders_order": [],
+ "placeholders": {}
+ },
+ "mustBeBelowN": "Harus di bawah {percentage}",
+ "@mustBeBelowN": {
+ "description": "Validation error to the user that they must choose a percentage below 'n'",
+ "type": "text",
+ "placeholders_order": [
+ "percentage"
+ ],
+ "placeholders": {
+ "percentage": {
+ "example": 5
+ }
+ }
+ },
+ "mustBeAboveN": "Harus di atas {percentage}",
+ "@mustBeAboveN": {
+ "description": "Validation error to the user that they must choose a percentage above 'n'",
+ "type": "text",
+ "placeholders_order": [
+ "percentage"
+ ],
+ "placeholders": {
+ "percentage": {
+ "example": 5
+ }
+ }
+ },
+ "Select Student Color": "Pilih Warna Siswa",
+ "@Select Student Color": {
+ "description": "Title for screen that allows users to assign a color to a specific student",
+ "type": "text",
+ "placeholders_order": [],
+ "placeholders": {}
+ },
+ "Electric, blue": "Electric, blue",
+ "@Electric, blue": {
+ "description": "Name of the Electric (blue) color",
+ "type": "text",
+ "placeholders_order": [],
+ "placeholders": {}
+ },
+ "Plum, Purple": "Plum, Purple",
+ "@Plum, Purple": {
+ "description": "Name of the Plum (purple) color",
+ "type": "text",
+ "placeholders_order": [],
+ "placeholders": {}
+ },
+ "Barney, Fuschia": "Barney, Fuschia",
+ "@Barney, Fuschia": {
+ "description": "Name of the Barney (fuschia) color",
+ "type": "text",
+ "placeholders_order": [],
+ "placeholders": {}
+ },
+ "Raspberry, Red": "Raspberry, Red",
+ "@Raspberry, Red": {
+ "description": "Name of the Raspberry (red) color",
+ "type": "text",
+ "placeholders_order": [],
+ "placeholders": {}
+ },
+ "Fire, Orange": "Fire, Orange",
+ "@Fire, Orange": {
+ "description": "Name of the Fire (orange) color",
+ "type": "text",
+ "placeholders_order": [],
+ "placeholders": {}
+ },
+ "Shamrock, Green": "Shamrock, Green",
+ "@Shamrock, Green": {
+ "description": "Name of the Shamrock (green) color",
+ "type": "text",
+ "placeholders_order": [],
+ "placeholders": {}
+ },
+ "An error occurred while saving your selection. Please try again.": "Kesalahan terjadi saat menyimpan pilihan Anda. Silakan coba lagi.",
+ "@An error occurred while saving your selection. Please try again.": {
+ "type": "text",
+ "placeholders_order": [],
+ "placeholders": {}
+ },
+ "changeStudentColorLabel": "Ubah warna untuk {studentName}",
+ "@changeStudentColorLabel": {
+ "description": "Accessibility label for the button that lets users change the color associated with a specific student",
+ "type": "text",
+ "placeholders_order": [
+ "studentName"
+ ],
+ "placeholders": {
+ "studentName": {}
+ }
+ },
+ "Teacher": "Guru",
+ "@Teacher": {
+ "description": "Label for the Teacher enrollment type",
+ "type": "text",
+ "placeholders_order": [],
+ "placeholders": {}
+ },
+ "Student": "Siswa",
+ "@Student": {
+ "description": "Label for the Student enrollment type",
+ "type": "text",
+ "placeholders_order": [],
+ "placeholders": {}
+ },
+ "TA": "TA",
+ "@TA": {
+ "description": "Label for the Teaching Assistant enrollment type (also known as Teacher Aid or Education Assistant), reduced to a short acronym/initialism if appropriate.",
+ "type": "text",
+ "placeholders_order": [],
+ "placeholders": {}
+ },
+ "Observer": "Pengamat",
+ "@Observer": {
+ "description": "Label for the Observer enrollment type",
+ "type": "text",
+ "placeholders_order": [],
+ "placeholders": {}
+ },
+ "Use Camera": "Gunakan Kamera",
+ "@Use Camera": {
+ "description": "Label for the action item that lets the user capture a photo using the device camera",
+ "type": "text",
+ "placeholders_order": [],
+ "placeholders": {}
+ },
+ "Upload File": "Unggah File",
+ "@Upload File": {
+ "description": "Label for the action item that lets the user upload a file from their device",
+ "type": "text",
+ "placeholders_order": [],
+ "placeholders": {}
+ },
+ "Choose from Gallery": "Pilih dari Galeri",
+ "@Choose from Gallery": {
+ "description": "Label for the action item that lets the user select a photo from their device gallery",
+ "type": "text",
+ "placeholders_order": [],
+ "placeholders": {}
+ },
+ "Preparing…": "Menyiapkan...",
+ "@Preparing…": {
+ "description": "Message shown while a file is being prepared to attach to a message",
+ "type": "text",
+ "placeholders_order": [],
+ "placeholders": {}
+ },
+ "Add student with…": "Tambah siswa dengan...",
+ "@Add student with…": {
+ "type": "text",
+ "placeholders_order": [],
+ "placeholders": {}
+ },
+ "Add Student": "Tambah Siswa",
+ "@Add Student": {
+ "type": "text",
+ "placeholders_order": [],
+ "placeholders": {}
+ },
+ "You are not observing any students.": "Anda tidak mengamati siswa manapun.",
+ "@You are not observing any students.": {
+ "type": "text",
+ "placeholders_order": [],
+ "placeholders": {}
+ },
+ "There was an error loading your students.": "Terjadi kesalahan ketika memuat siswa Anda.",
+ "@There was an error loading your students.": {
+ "type": "text",
+ "placeholders_order": [],
+ "placeholders": {}
+ },
+ "Pairing Code": "Kode Pairing",
+ "@Pairing Code": {
+ "type": "text",
+ "placeholders_order": [],
+ "placeholders": {}
+ },
+ "Students can obtain a pairing code through the Canvas website": "Siswa bisa mendapat kode pairing melalui situs web Canvas",
+ "@Students can obtain a pairing code through the Canvas website": {
+ "type": "text",
+ "placeholders_order": [],
+ "placeholders": {}
+ },
+ "Enter the student pairing code provided to you. If the pairing code doesn't work, it may have expired": "Masukkan kode pairing siswa yang diberikan kepada Anda. Jika kode pairing gagal, mungkin sudah kedaluwarsa",
+ "@Enter the student pairing code provided to you. If the pairing code doesn't work, it may have expired": {
+ "type": "text",
+ "placeholders_order": [],
+ "placeholders": {}
+ },
+ "Your code is incorrect or expired.": "Kode Anda salah atau sudah kedaluwarsa.",
+ "@Your code is incorrect or expired.": {
+ "type": "text",
+ "placeholders_order": [],
+ "placeholders": {}
+ },
+ "Something went wrong trying to create your account, please reach out to your school for assistance.": "Terjadi kesalahan saat mencoba membuat akun Anda, silakan hubungi sekolah Anda untuk mendapat bantuan.",
+ "@Something went wrong trying to create your account, please reach out to your school for assistance.": {
+ "type": "text",
+ "placeholders_order": [],
+ "placeholders": {}
+ },
+ "QR Code": "Kode QR",
+ "@QR Code": {
+ "type": "text",
+ "placeholders_order": [],
+ "placeholders": {}
+ },
+ "Students can create a QR code using the Canvas Student app on their mobile device": "Siswa dapat membuat kode QR menggunakan aplikasi Canvas Student di perangkat selulernya",
+ "@Students can create a QR code using the Canvas Student app on their mobile device": {
+ "type": "text",
+ "placeholders_order": [],
+ "placeholders": {}
+ },
+ "Add new student": "Tambah siswa baru",
+ "@Add new student": {
+ "description": "Semantics label for the FAB on the Manage Students Screen",
+ "type": "text",
+ "placeholders_order": [],
+ "placeholders": {}
+ },
+ "Select": "Pilih",
+ "@Select": {
+ "description": "Hint text to tell the user to choose one of two options",
+ "type": "text",
+ "placeholders_order": [],
+ "placeholders": {}
+ },
+ "I have a Canvas account": "Saya punya akun Canvas",
+ "@I have a Canvas account": {
+ "description": "Option to select for users that have a canvas account",
+ "type": "text",
+ "placeholders_order": [],
+ "placeholders": {}
+ },
+ "I don't have a Canvas account": "Saya tidak punya akun Canvas",
+ "@I don't have a Canvas account": {
+ "description": "Option to select for users that don't have a canvas account",
+ "type": "text",
+ "placeholders_order": [],
+ "placeholders": {}
+ },
+ "Create Account": "Buat Akun",
+ "@Create Account": {
+ "description": "Button text for account creation confirmation",
+ "type": "text",
+ "placeholders_order": [],
+ "placeholders": {}
+ },
+ "Full Name": "Nama Lengkap",
+ "@Full Name": {
+ "type": "text",
+ "placeholders_order": [],
+ "placeholders": {}
+ },
+ "Email Address": "Alamat Email",
+ "@Email Address": {
+ "type": "text",
+ "placeholders_order": [],
+ "placeholders": {}
+ },
+ "Password": "Kata sandi",
+ "@Password": {
+ "type": "text",
+ "placeholders_order": [],
+ "placeholders": {}
+ },
+ "Full Name…": "Nama Lengkap...",
+ "@Full Name…": {
+ "description": "hint label for inside form field",
+ "type": "text",
+ "placeholders_order": [],
+ "placeholders": {}
+ },
+ "Email…": "Email...",
+ "@Email…": {
+ "description": "hint label for inside form field",
+ "type": "text",
+ "placeholders_order": [],
+ "placeholders": {}
+ },
+ "Password…": "Kata sandi...",
+ "@Password…": {
+ "description": "hint label for inside form field",
+ "type": "text",
+ "placeholders_order": [],
+ "placeholders": {}
+ },
+ "Please enter full name": "Silakan masukkan nama lengkap",
+ "@Please enter full name": {
+ "description": "Error message for form field",
+ "type": "text",
+ "placeholders_order": [],
+ "placeholders": {}
+ },
+ "Please enter an email address": "Silakan masukkan alamat email",
+ "@Please enter an email address": {
+ "description": "Error message for form field",
+ "type": "text",
+ "placeholders_order": [],
+ "placeholders": {}
+ },
+ "Please enter a valid email address": "Silakan alamat email yang valid",
+ "@Please enter a valid email address": {
+ "description": "Error message for form field",
+ "type": "text",
+ "placeholders_order": [],
+ "placeholders": {}
+ },
+ "Password is required": "Kata sandi harus ada",
+ "@Password is required": {
+ "description": "Error message for form field",
+ "type": "text",
+ "placeholders_order": [],
+ "placeholders": {}
+ },
+ "Password must contain at least 8 characters": "Kata sandi harus memuat setidaknya 8 karakter.",
+ "@Password must contain at least 8 characters": {
+ "description": "Error message for form field",
+ "type": "text",
+ "placeholders_order": [],
+ "placeholders": {}
+ },
+ "qrCreateAccountTos": "Dengan mengetuk ‘Buat Akun’, Anda menyetujui {termsOfService} dan mengakui {privacyPolicy}",
+ "@qrCreateAccountTos": {
+ "description": "The text show on the account creation screen",
+ "type": "text",
+ "placeholders_order": [
+ "termsOfService",
+ "privacyPolicy"
+ ],
+ "placeholders": {
+ "termsOfService": {},
+ "privacyPolicy": {}
+ }
+ },
+ "Terms of Service": "Ketentuan Layanan",
+ "@Terms of Service": {
+ "description": "Label for the Canvas Terms of Service agreement. This will be used in the qrCreateAccountTos text and will be highlighted and clickable",
+ "type": "text",
+ "placeholders_order": [],
+ "placeholders": {}
+ },
+ "Privacy Policy": "Kebijakan Privasi",
+ "@Privacy Policy": {
+ "description": "Label for the Canvas Privacy Policy agreement. This will be used in the qrCreateAccountTos text and will be highlighted and clickable",
+ "type": "text",
+ "placeholders_order": [],
+ "placeholders": {}
+ },
+ "View the Privacy Policy": "Lihat Kebijakan Privasi",
+ "@View the Privacy Policy": {
+ "type": "text",
+ "placeholders_order": [],
+ "placeholders": {}
+ },
+ "Already have an account? ": "Sudah memiliki akun? ",
+ "@Already have an account? ": {
+ "description": "Part of multiline text span, includes AccountSignIn1-2, in that order",
+ "type": "text",
+ "placeholders_order": [],
+ "placeholders": {}
+ },
+ "Sign In": "Masuk",
+ "@Sign In": {
+ "description": "Part of multiline text span, includes AccountSignIn1-2, in that order",
+ "type": "text",
+ "placeholders_order": [],
+ "placeholders": {}
+ },
+ "Hide Password": "Sembunyikan Kata Sandi",
+ "@Hide Password": {
+ "description": "content description for password hide button",
+ "type": "text",
+ "placeholders_order": [],
+ "placeholders": {}
+ },
+ "Show Password": "Tampilkan Kata Sandi",
+ "@Show Password": {
+ "description": "content description for password show button",
+ "type": "text",
+ "placeholders_order": [],
+ "placeholders": {}
+ },
+ "Terms of Service Link": "Tautan Ketentuan Layanan",
+ "@Terms of Service Link": {
+ "description": "content description for terms of service link",
+ "type": "text",
+ "placeholders_order": [],
+ "placeholders": {}
+ },
+ "Privacy Policy Link": "Tautan Kebijakan Privasi",
+ "@Privacy Policy Link": {
+ "description": "content description for privacy policy link",
+ "type": "text",
+ "placeholders_order": [],
+ "placeholders": {}
+ },
+ "Event": "Acara",
+ "@Event": {
+ "description": "Title for the event details screen",
+ "type": "text",
+ "placeholders_order": [],
+ "placeholders": {}
+ },
+ "Date": "Tanggal",
+ "@Date": {
+ "description": "Label for the event date",
+ "type": "text",
+ "placeholders_order": [],
+ "placeholders": {}
+ },
+ "Location": "Lokasi",
+ "@Location": {
+ "description": "Label for the location information",
+ "type": "text",
+ "placeholders_order": [],
+ "placeholders": {}
+ },
+ "No Location Specified": "Lokasi Tidak Ditetapkan",
+ "@No Location Specified": {
+ "description": "Description for events that do not have a location",
+ "type": "text",
+ "placeholders_order": [],
+ "placeholders": {}
+ },
+ "eventTime": "{startAt} - {endAt}",
+ "@eventTime": {
+ "description": "The time the event is happening, example: \"2:00 pm - 4:00 pm\"",
+ "type": "text",
+ "placeholders_order": [
+ "startAt",
+ "endAt"
+ ],
+ "placeholders": {
+ "startAt": {},
+ "endAt": {}
+ }
+ },
+ "Set a date and time to be notified of this event.": "Atur tanggal dan waktu untuk diberi tahu tentang acara ini.",
+ "@Set a date and time to be notified of this event.": {
+ "description": "Description for row to set event reminders",
+ "type": "text",
+ "placeholders_order": [],
+ "placeholders": {}
+ },
+ "You will be notified about this event on…": "Anda akan diberi tahu tentang acara ini pada…",
+ "@You will be notified about this event on…": {
+ "description": "Description for when an event reminder is set",
+ "type": "text",
+ "placeholders_order": [],
+ "placeholders": {}
+ },
+ "Share Your Love for the App": "Bagikan Cinta Anda untuk Aplikasi",
+ "@Share Your Love for the App": {
+ "description": "Label for option to open the app store",
+ "type": "text",
+ "placeholders_order": [],
+ "placeholders": {}
+ },
+ "Tell us about your favorite parts of the app": "Beri tahu kami bagian favorit Anda dari aplikasi",
+ "@Tell us about your favorite parts of the app": {
+ "description": "Description for option to open the app store",
+ "type": "text",
+ "placeholders_order": [],
+ "placeholders": {}
+ },
+ "Legal": "Hukum",
+ "@Legal": {
+ "description": "Label for legal information option",
+ "type": "text",
+ "placeholders_order": [],
+ "placeholders": {}
+ },
+ "Privacy policy, terms of use, open source": "Kebijakan privasi, ketentuan penggunaan, open source",
+ "@Privacy policy, terms of use, open source": {
+ "description": "Description for legal information option",
+ "type": "text",
+ "placeholders_order": [],
+ "placeholders": {}
+ },
+ "Idea for Canvas Parent App [Android]": "Ide untuk aplikasi Canvas Parent [Android]",
+ "@Idea for Canvas Parent App [Android]": {
+ "description": "The subject for the email to request a feature",
+ "type": "text",
+ "placeholders_order": [],
+ "placeholders": {}
+ },
+ "The following information will help us better understand your idea:": "Informasi berikut akan membantu kami memahami ide Anda lebih baik:",
+ "@The following information will help us better understand your idea:": {
+ "description": "The header for the users information that is attached to a feature request",
+ "type": "text",
+ "placeholders_order": [],
+ "placeholders": {}
+ },
+ "Domain:": "Domain:",
+ "@Domain:": {
+ "description": "The label for the Canvas domain of the logged in user",
+ "type": "text",
+ "placeholders_order": [],
+ "placeholders": {}
+ },
+ "User ID:": "ID Pengguna:",
+ "@User ID:": {
+ "description": "The label for the Canvas user ID of the logged in user",
+ "type": "text",
+ "placeholders_order": [],
+ "placeholders": {}
+ },
+ "Email:": "Email:",
+ "@Email:": {
+ "description": "The label for the eamil of the logged in user",
+ "type": "text",
+ "placeholders_order": [],
+ "placeholders": {}
+ },
+ "Locale:": "Lokasi:",
+ "@Locale:": {
+ "description": "The label for the locale of the logged in user",
+ "type": "text",
+ "placeholders_order": [],
+ "placeholders": {}
+ },
+ "Terms of Use": "Ketentuan Penggunaan",
+ "@Terms of Use": {
+ "description": "Label for the terms of use",
+ "type": "text",
+ "placeholders_order": [],
+ "placeholders": {}
+ },
+ "Canvas on GitHub": "Canvas di GitHub",
+ "@Canvas on GitHub": {
+ "description": "Label for the button that opens the Canvas project on GitHub's website",
+ "type": "text",
+ "placeholders_order": [],
+ "placeholders": {}
+ },
+ "There was a problem loading the Terms of Use": "Ada masalah saat memuat Ketentuan Penggunaan",
+ "@There was a problem loading the Terms of Use": {
+ "type": "text",
+ "placeholders_order": [],
+ "placeholders": {}
+ },
+ "Device": "Perangkat",
+ "@Device": {
+ "description": "Label used for device manufacturer/model in the error report",
+ "type": "text",
+ "placeholders_order": [],
+ "placeholders": {}
+ },
+ "OS Version": "Versi OS",
+ "@OS Version": {
+ "description": "Label used for device operating system version in the error report",
+ "type": "text",
+ "placeholders_order": [],
+ "placeholders": {}
+ },
+ "Version Number": "Nomor Versi",
+ "@Version Number": {
+ "description": "Label used for the app version number in the error report",
+ "type": "text",
+ "placeholders_order": [],
+ "placeholders": {}
+ },
+ "Report A Problem": "Laporkan Masalah",
+ "@Report A Problem": {
+ "description": "Title used for generic dialog to report problems",
+ "type": "text",
+ "placeholders_order": [],
+ "placeholders": {}
+ },
+ "Subject": "Subjek",
+ "@Subject": {
+ "description": "Label used for Subject text field",
+ "type": "text",
+ "placeholders_order": [],
+ "placeholders": {}
+ },
+ "A subject is required.": "Deskripsi harus ada.",
+ "@A subject is required.": {
+ "description": "Error shown when the subject field is empty",
+ "type": "text",
+ "placeholders_order": [],
+ "placeholders": {}
+ },
+ "An email address is required.": "Alamat email harus ada.",
+ "@An email address is required.": {
+ "description": "Error shown when the email field is empty",
+ "type": "text",
+ "placeholders_order": [],
+ "placeholders": {}
+ },
+ "Description": "Deskripsi",
+ "@Description": {
+ "description": "Label used for Description text field",
+ "type": "text",
+ "placeholders_order": [],
+ "placeholders": {}
+ },
+ "A description is required.": "Deskripsi harus ada.",
+ "@A description is required.": {
+ "description": "Error shown when the description field is empty",
+ "type": "text",
+ "placeholders_order": [],
+ "placeholders": {}
+ },
+ "How is this affecting you?": "Bagaimana ini berpengaruh pada Anda?",
+ "@How is this affecting you?": {
+ "description": "Label used for the dropdown to select how severe the issue is",
+ "type": "text",
+ "placeholders_order": [],
+ "placeholders": {}
+ },
+ "send": "kirim",
+ "@send": {
+ "description": "Label used for send button when reporting a problem",
+ "type": "text",
+ "placeholders_order": [],
+ "placeholders": {}
+ },
+ "Just a casual question, comment, idea, suggestion…": "Hanya pertanyaan biasa, komentar, ide, saran...",
+ "@Just a casual question, comment, idea, suggestion…": {
+ "type": "text",
+ "placeholders_order": [],
+ "placeholders": {}
+ },
+ "I need some help but it's not urgent.": "Saya butuh bantuan tetapi tidak mendesak.",
+ "@I need some help but it's not urgent.": {
+ "type": "text",
+ "placeholders_order": [],
+ "placeholders": {}
+ },
+ "Something's broken but I can work around it to get what I need done.": "Ada yang terputus tetapi bisa saya cari cara untuk mendapat apa yang saya butuhkan.",
+ "@Something's broken but I can work around it to get what I need done.": {
+ "type": "text",
+ "placeholders_order": [],
+ "placeholders": {}
+ },
+ "I can't get things done until I hear back from you.": "Saya tidak bisa melakukan apa pun sampai saya mendapat info dari Anda.",
+ "@I can't get things done until I hear back from you.": {
+ "type": "text",
+ "placeholders_order": [],
+ "placeholders": {}
+ },
+ "EXTREME CRITICAL EMERGENCY!!": "DARURAT KRITIKAL EKSTREM!!",
+ "@EXTREME CRITICAL EMERGENCY!!": {
+ "type": "text",
+ "placeholders_order": [],
+ "placeholders": {}
+ },
+ "Not Graded": "Tidak Dinilai",
+ "@Not Graded": {
+ "description": "Description for an assignment has not been graded.",
+ "type": "text",
+ "placeholders_order": [],
+ "placeholders": {}
+ },
+ "Login flow: Normal": "Alur login: Normal",
+ "@Login flow: Normal": {
+ "description": "Description for the normal login flow",
+ "type": "text",
+ "placeholders_order": [],
+ "placeholders": {}
+ },
+ "Login flow: Canvas": "Alur login: Canvas",
+ "@Login flow: Canvas": {
+ "description": "Description for the Canvas login flow",
+ "type": "text",
+ "placeholders_order": [],
+ "placeholders": {}
+ },
+ "Login flow: Site Admin": "Alur login: Admin Situs",
+ "@Login flow: Site Admin": {
+ "description": "Description for the Site Admin login flow",
+ "type": "text",
+ "placeholders_order": [],
+ "placeholders": {}
+ },
+ "Login flow: Skip mobile verify": "Alur login: Lewatkan verifikasi seluler",
+ "@Login flow: Skip mobile verify": {
+ "description": "Description for the login flow that skips domain verification for mobile",
+ "type": "text",
+ "placeholders_order": [],
+ "placeholders": {}
+ },
+ "Act As User": "Bertindak sebagai Pengguna",
+ "@Act As User": {
+ "description": "Label for the button that allows the user to act (masquerade) as another user",
+ "type": "text",
+ "placeholders_order": [],
+ "placeholders": {}
+ },
+ "Stop Acting as User": "Stop Bertindak sebagai Pengguna",
+ "@Stop Acting as User": {
+ "description": "Label for the button that allows the user to stop acting (masquerading) as another user",
+ "type": "text",
+ "placeholders_order": [],
+ "placeholders": {}
+ },
+ "actingAsUser": "Anda bertindak sebagai {userName}",
+ "@actingAsUser": {
+ "description": "Message shown while acting (masquerading) as another user",
+ "type": "text",
+ "placeholders_order": [
+ "userName"
+ ],
+ "placeholders": {
+ "userName": {}
+ }
+ },
+ "\"Act as\" is essentially logging in as this user without a password. You will be able to take any action as if you were this user, and from other users' points of views, it will be as if this user performed them. However, audit logs record that you were the one who performed the actions on behalf of this user.": "“Act as” (Bertindak Sebagai) pada dasarnya adalah melakukan login sebagai pengguna ini tanpa kata sandi. Anda akan dapat melakukan tindakan apa pun jika Anda adalah pengguna ini, dan dari sudut pandang pengguna lain, ini seakan-akan pengguna ini melakukannya. Namun, log audit mencatat bahwa Anda lah orang yang melakukan tindakan atas nama pengguna ini.",
+ "@\"Act as\" is essentially logging in as this user without a password. You will be able to take any action as if you were this user, and from other users' points of views, it will be as if this user performed them. However, audit logs record that you were the one who performed the actions on behalf of this user.": {
+ "type": "text",
+ "placeholders_order": [],
+ "placeholders": {}
+ },
+ "Domain": "Domain",
+ "@Domain": {
+ "description": "Text field hint for domain url input",
+ "type": "text",
+ "placeholders_order": [],
+ "placeholders": {}
+ },
+ "You must enter a valid domain": "Anda harus memasukkan domain yang valid",
+ "@You must enter a valid domain": {
+ "description": "Message displayed for domain input error",
+ "type": "text",
+ "placeholders_order": [],
+ "placeholders": {}
+ },
+ "User ID": "ID Pengguna",
+ "@User ID": {
+ "description": "Text field hint for user ID input",
+ "type": "text",
+ "placeholders_order": [],
+ "placeholders": {}
+ },
+ "You must enter a user id": "Anda harus memasukkan id pengguna",
+ "@You must enter a user id": {
+ "description": "Message displayed for user Id input error",
+ "type": "text",
+ "placeholders_order": [],
+ "placeholders": {}
+ },
+ "There was an error trying to act as this user. Please check the Domain and User ID and try again.": "Terjadi kesalahan saat mencoba bertindak sebagai pengguna ini. Silakan cek Domain dan ID Pengguna dan coba lagi.",
+ "@There was an error trying to act as this user. Please check the Domain and User ID and try again.": {
+ "type": "text",
+ "placeholders_order": [],
+ "placeholders": {}
+ },
+ "endMasqueradeMessage": "Anda akan berhenti bertindak sebagai {userName} dan kembali ke akun asli Anda.",
+ "@endMasqueradeMessage": {
+ "description": "Confirmation message displayed when the user wants to stop acting (masquerading) as another user",
+ "type": "text",
+ "placeholders_order": [
+ "userName"
+ ],
+ "placeholders": {
+ "userName": {}
+ }
+ },
+ "endMasqueradeLogoutMessage": "Anda akan berhenti bertindak sebagai {userName} dan logout.",
+ "@endMasqueradeLogoutMessage": {
+ "description": "Confirmation message displayed when the user wants to stop acting (masquerading) as another user and will be logged out.",
+ "type": "text",
+ "placeholders_order": [
+ "userName"
+ ],
+ "placeholders": {
+ "userName": {}
+ }
+ },
+ "How are we doing?": "Bagaimana kabarnya?",
+ "@How are we doing?": {
+ "description": "Title for dialog asking user to rate the app out of 5 stars.",
+ "type": "text",
+ "placeholders_order": [],
+ "placeholders": {}
+ },
+ "Don't show again": "Jangan tampilkan lagi",
+ "@Don't show again": {
+ "description": "Button to prevent the rating dialog from showing again.",
+ "type": "text",
+ "placeholders_order": [],
+ "placeholders": {}
+ },
+ "What can we do better?": "Apa yang dapat kami tingkatkan?",
+ "@What can we do better?": {
+ "description": "Hint text for providing a comment with the rating.",
+ "type": "text",
+ "placeholders_order": [],
+ "placeholders": {}
+ },
+ "Send Feedback": "Kirim Umpan Balik",
+ "@Send Feedback": {
+ "description": "Button to send rating with feedback",
+ "type": "text",
+ "placeholders_order": [],
+ "placeholders": {}
+ },
+ "ratingDialogEmailSubject": "Saran untuk Android - Canvas Parent {version}",
+ "@ratingDialogEmailSubject": {
+ "description": "The subject for an email to provide feedback for CanvasParent.",
+ "type": "text",
+ "placeholders_order": [
+ "version"
+ ],
+ "placeholders": {
+ "version": {}
+ }
+ },
+ "starRating": "{position,plural, =1{{position} bintang}other{{position} bintang}}",
+ "@starRating": {
+ "description": "Accessibility label for the 1 stars to 5 stars rating",
+ "type": "text",
+ "placeholders_order": [
+ "position"
+ ],
+ "placeholders": {
+ "position": {
+ "example": 1
+ }
+ }
+ },
+ "Student Pairing": "Pairing Siswa",
+ "@Student Pairing": {
+ "description": "Title for the screen where users can pair to students using a QR code",
+ "type": "text",
+ "placeholders_order": [],
+ "placeholders": {}
+ },
+ "Open Canvas Student": "Buka Canvas Student",
+ "@Open Canvas Student": {
+ "description": "Title for QR pairing tutorial screen instructing users to open the Canvas Student app",
+ "type": "text",
+ "placeholders_order": [],
+ "placeholders": {}
+ },
+ "You'll need to open your student's Canvas Student app to continue. Go into Main Menu > Settings > Pair with Observer and scan the QR code you see there.": "Anda harus membuka aplikasi Canvas Student Anda untuk melanjutkan. Pergilah ke Menu Utama > Pengaturan > Pairing dengan Pengamat dan pindai kode QR yang Anda lihat di sana.",
+ "@You'll need to open your student's Canvas Student app to continue. Go into Main Menu > Settings > Pair with Observer and scan the QR code you see there.": {
+ "description": "Message explaining how QR code pairing works",
+ "type": "text",
+ "placeholders_order": [],
+ "placeholders": {}
+ },
+ "Screenshot showing location of pairing QR code generation in the Canvas Student app": "Tangkapan layar yang menampilkan lokasi pembuatan pairing kode QR di aplikasi Canvas Student",
+ "@Screenshot showing location of pairing QR code generation in the Canvas Student app": {
+ "description": "Content Description for qr pairing tutorial screenshot",
+ "type": "text",
+ "placeholders_order": [],
+ "placeholders": {}
+ },
+ "Expired QR Code": "Kode QR Kedaluwarsa",
+ "@Expired QR Code": {
+ "description": "Error title shown when the users scans a QR code that has expired",
+ "type": "text",
+ "placeholders_order": [],
+ "placeholders": {}
+ },
+ "The QR code you scanned may have expired. Refresh the code on the student's device and try again.": "Kode QR yang Anda pindai mungkin telah kedaluwarsa. Muat ulang kode di perangkat siswa dan coba lagi.",
+ "@The QR code you scanned may have expired. Refresh the code on the student's device and try again.": {
+ "type": "text",
+ "placeholders_order": [],
+ "placeholders": {}
+ },
+ "A network error occurred when adding this student. Check your connection and try again.": "Terjadi kesalahan jaringan saat menambah siswa ini. Periksa koneksi Anda dan coba lagi.",
+ "@A network error occurred when adding this student. Check your connection and try again.": {
+ "type": "text",
+ "placeholders_order": [],
+ "placeholders": {}
+ },
+ "Invalid QR Code": "Kode QR Tidak Valid",
+ "@Invalid QR Code": {
+ "description": "Error title shown when the user scans an invalid QR code",
+ "type": "text",
+ "placeholders_order": [],
+ "placeholders": {}
+ },
+ "Incorrect Domain": "Domain Salah",
+ "@Incorrect Domain": {
+ "description": "Error title shown when the users scane a QR code for a student that belongs to a different domain",
+ "type": "text",
+ "placeholders_order": [],
+ "placeholders": {}
+ },
+ "The student you are trying to add belongs to a different school. Log in or create an account with that school to scan this code.": "Siswa yang Anda coba tambah ada di sekolah lain. Masuk atau buat akun dengan sekolah itu untuk memindai kode ini.",
+ "@The student you are trying to add belongs to a different school. Log in or create an account with that school to scan this code.": {
+ "type": "text",
+ "placeholders_order": [],
+ "placeholders": {}
+ },
+ "Camera Permission": "Izin Kamera",
+ "@Camera Permission": {
+ "description": "Error title shown when the user wans to scan a QR code but has denied the camera permission",
+ "type": "text",
+ "placeholders_order": [],
+ "placeholders": {}
+ },
+ "This will unpair and remove all enrollments for this student from your account.": "Ini akan menghapus pairing dan menghapus semua pendaftaran untuk siswa ini dari akun Anda.",
+ "@This will unpair and remove all enrollments for this student from your account.": {
+ "description": "Confirmation message shown when the user tries to delete a student from their account",
+ "type": "text",
+ "placeholders_order": [],
+ "placeholders": {}
+ },
+ "There was a problem removing this student from your account. Please check your connection and try again.": "Ada masalah saat menghapus siswa ini dari akun Anda. Silakan periksa sambungan internet Anda dan coba lagi.",
+ "@There was a problem removing this student from your account. Please check your connection and try again.": {
+ "type": "text",
+ "placeholders_order": [],
+ "placeholders": {}
+ },
+ "Cancel": "Batal",
+ "@Cancel": {
+ "type": "text",
+ "placeholders_order": [],
+ "placeholders": {}
+ },
+ "next": "Berikutnya",
+ "@next": {
+ "type": "text",
+ "placeholders_order": [],
+ "placeholders": {}
+ },
+ "ok": "OK",
+ "@ok": {
+ "type": "text",
+ "placeholders_order": [],
+ "placeholders": {}
+ },
+ "Yes": "Ya",
+ "@Yes": {
+ "type": "text",
+ "placeholders_order": [],
+ "placeholders": {}
+ },
+ "No": "Tidak",
+ "@No": {
+ "type": "text",
+ "placeholders_order": [],
+ "placeholders": {}
+ },
+ "Retry": "Coba lagi",
+ "@Retry": {
+ "type": "text",
+ "placeholders_order": [],
+ "placeholders": {}
+ },
+ "Delete": "Hapus",
+ "@Delete": {
+ "description": "Label used for general delete/remove actions",
+ "type": "text",
+ "placeholders_order": [],
+ "placeholders": {}
+ },
+ "Done": "Selesai",
+ "@Done": {
+ "description": "Label for general done/finished actions",
+ "type": "text",
+ "placeholders_order": [],
+ "placeholders": {}
+ },
+ "Refresh": "Segarkan Ulang",
+ "@Refresh": {
+ "description": "Label for button to refresh data from the web",
+ "type": "text",
+ "placeholders_order": [],
+ "placeholders": {}
+ },
+ "View Description": "Lihat Deskripsi",
+ "@View Description": {
+ "description": "Button to view the description for an event or assignment",
+ "type": "text",
+ "placeholders_order": [],
+ "placeholders": {}
+ },
+ "expanded": "diperbesar",
+ "@expanded": {
+ "description": "Description for the accessibility reader for list groups that are expanded",
+ "type": "text",
+ "placeholders_order": [],
+ "placeholders": {}
+ },
+ "collapsed": "diperkecil",
+ "@collapsed": {
+ "description": "Description for the accessibility reader for list groups that are expanded",
+ "type": "text",
+ "placeholders_order": [],
+ "placeholders": {}
+ },
+ "An unexpected error occurred": "Terjadi kesalahan yang tidak terduga",
+ "@An unexpected error occurred": {
+ "type": "text",
+ "placeholders_order": [],
+ "placeholders": {}
+ },
+ "No description": "Tanpa deskripsi",
+ "@No description": {
+ "description": "Message used when the assignment has no description",
+ "type": "text",
+ "placeholders_order": [],
+ "placeholders": {}
+ },
+ "Launch External Tool": "Luncurkan Alat Eksternal",
+ "@Launch External Tool": {
+ "description": "Button text added to webviews to let users open external tools in their browser",
+ "type": "text",
+ "placeholders_order": [],
+ "placeholders": {}
+ },
+ "Interactions on this page are limited by your institution.": "Interaksi di halaman ini dibatasi oleh institusi Anda.",
+ "@Interactions on this page are limited by your institution.": {
+ "description": "Message describing how the webview has limited access due to an instution setting",
+ "type": "text",
+ "placeholders_order": [],
+ "placeholders": {}
+ },
+ "dateAtTime": "{date} di {time}",
+ "@dateAtTime": {
+ "description": "The string to format dates",
+ "type": "text",
+ "placeholders_order": [
+ "date",
+ "time"
+ ],
+ "placeholders": {
+ "date": {},
+ "time": {}
+ }
+ },
+ "dueDateAtTime": "Batas waktu {date} pada {time}",
+ "@dueDateAtTime": {
+ "description": "The string to format due dates",
+ "type": "text",
+ "placeholders_order": [
+ "date",
+ "time"
+ ],
+ "placeholders": {
+ "date": {},
+ "time": {}
+ }
+ },
+ "No Due Date": "Tidak Ada Batas Waktu",
+ "@No Due Date": {
+ "description": "Label for assignments that do not have a due date",
+ "type": "text",
+ "placeholders_order": [],
+ "placeholders": {}
+ },
+ "Filter": "Filter",
+ "@Filter": {
+ "description": "Label for buttons to filter what items are visible",
+ "type": "text",
+ "placeholders_order": [],
+ "placeholders": {}
+ },
+ "unread": "belum dibaca",
+ "@unread": {
+ "description": "Label for things that are marked as unread",
+ "type": "text",
+ "placeholders_order": [],
+ "placeholders": {}
+ },
+ "unreadCount": "{count} belum dibaca",
+ "@unreadCount": {
+ "description": "Formatted string for when there are a number of unread items",
+ "type": "text",
+ "placeholders_order": [
+ "count"
+ ],
+ "placeholders": {
+ "count": {}
+ }
+ },
+ "badgeNumberPlus": "{count}+",
+ "@badgeNumberPlus": {
+ "description": "Formatted string for when too many items are being notified in a badge, generally something like: 99+",
+ "type": "text",
+ "placeholders_order": [
+ "count"
+ ],
+ "placeholders": {
+ "count": {}
+ }
+ },
+ "There was an error loading this announcement": "Terjadi kesalahan saat memuat pengumuman ini",
+ "@There was an error loading this announcement": {
+ "description": "Message shown when an announcement detail screen fails to load",
+ "type": "text",
+ "placeholders_order": [],
+ "placeholders": {}
+ },
+ "Network error": "Kesalahan jaringan",
+ "@Network error": {
+ "type": "text",
+ "placeholders_order": [],
+ "placeholders": {}
+ },
+ "Under Construction": "Sedang Dibuat",
+ "@Under Construction": {
+ "type": "text",
+ "placeholders_order": [],
+ "placeholders": {}
+ },
+ "We are currently building this feature for your viewing pleasure.": "Kami saat ini sedang membangun fitur ini untuk memudahkan Anda.",
+ "@We are currently building this feature for your viewing pleasure.": {
+ "type": "text",
+ "placeholders_order": [],
+ "placeholders": {}
+ },
+ "Request Login Help Button": "Tombol Minta Bantuan Login",
+ "@Request Login Help Button": {
+ "description": "Accessibility hint for button that opens help dialog for a login help request",
+ "type": "text",
+ "placeholders_order": [],
+ "placeholders": {}
+ },
+ "Request Login Help": "Minta Bantuan Login",
+ "@Request Login Help": {
+ "description": "Title of help dialog for a login help request",
+ "type": "text",
+ "placeholders_order": [],
+ "placeholders": {}
+ },
+ "I'm having trouble logging in": "Saya kesulitan login",
+ "@I'm having trouble logging in": {
+ "description": "Subject of help dialog for a login help request",
+ "type": "text",
+ "placeholders_order": [],
+ "placeholders": {}
+ },
+ "An error occurred when trying to display this link": "Kesalahan terjadi saat mencoba menampilkan tautan ini.",
+ "@An error occurred when trying to display this link": {
+ "description": "Error message shown when a link can't be opened",
+ "type": "text",
+ "placeholders_order": [],
+ "placeholders": {}
+ },
+ "We are unable to display this link, it may belong to an institution you currently aren't logged in to.": "Kami tidak dapat menampilkan tautan ini, mungkin milik institusi tempat Anda saat ini tidak login kepadanya.",
+ "@We are unable to display this link, it may belong to an institution you currently aren't logged in to.": {
+ "description": "Description for error page shown when clicking a link",
+ "type": "text",
+ "placeholders_order": [],
+ "placeholders": {}
+ },
+ "Link Error": "Kesalahan Tautan",
+ "@Link Error": {
+ "description": "Title for error page shown when clicking a link",
+ "type": "text",
+ "placeholders_order": [],
+ "placeholders": {}
+ },
+ "Open In Browser": "Buka di Browser",
+ "@Open In Browser": {
+ "description": "Text for button to open a link in the browswer",
+ "type": "text",
+ "placeholders_order": [],
+ "placeholders": {}
+ },
+ "You'll find the QR code on the web in your account profile. Click 'QR for Mobile Login' in the list.": "Anda akan menemukan kode QR di web di profil akun Anda. Klik 'QR untuk Login Seluler' di dalam daftar.",
+ "@You'll find the QR code on the web in your account profile. Click 'QR for Mobile Login' in the list.": {
+ "description": "Text for qr login tutorial screen",
+ "type": "text",
+ "placeholders_order": [],
+ "placeholders": {}
+ },
+ "Locate QR Code": "Temukan Kode QR",
+ "@Locate QR Code": {
+ "description": "Text for qr login button",
+ "type": "text",
+ "placeholders_order": [],
+ "placeholders": {}
+ },
+ "Please scan a QR code generated by Canvas": "Silakan pindai kode QR yang dibuat oleh Canvas",
+ "@Please scan a QR code generated by Canvas": {
+ "description": "Text for qr login error with incorrect qr code",
+ "type": "text",
+ "placeholders_order": [],
+ "placeholders": {}
+ },
+ "There was an error logging in. Please generate another QR Code and try again.": "Terjadi kesalahan saat login. Silakan buat Kode QR lain dan coba lagi.",
+ "@There was an error logging in. Please generate another QR Code and try again.": {
+ "description": "Text for qr login error",
+ "type": "text",
+ "placeholders_order": [],
+ "placeholders": {}
+ },
+ "Screenshot showing location of QR code generation in browser": "Tangkapan layar yang menampilkan lokasi pembuatan kode QR di browser",
+ "@Screenshot showing location of QR code generation in browser": {
+ "description": "Content Description for qr login tutorial screenshot",
+ "type": "text",
+ "placeholders_order": [],
+ "placeholders": {}
+ },
+ "QR scanning requires camera access": "Pemindaian QR membutuhkan akses kamera",
+ "@QR scanning requires camera access": {
+ "description": "placeholder for camera error for QR code scan",
+ "type": "text",
+ "placeholders_order": [],
+ "placeholders": {}
+ },
+ "The linked item is no longer available": "Item yang dikaitkan tidak lagi tersedia",
+ "@The linked item is no longer available": {
+ "description": "error message when the alert could no be opened",
+ "type": "text",
+ "placeholders_order": [],
+ "placeholders": {}
+ },
+ "Message sent": "Pesan terkirim",
+ "@Message sent": {
+ "description": "confirmation message on the screen when the user succesfully sends a message",
+ "type": "text",
+ "placeholders_order": [],
+ "placeholders": {}
+ }
+}
\ No newline at end of file
diff --git a/apps/flutter_parent/lib/l10n/res/intl_is.arb b/apps/flutter_parent/lib/l10n/res/intl_is.arb
index 7a09f7f413..611e1defc6 100644
--- a/apps/flutter_parent/lib/l10n/res/intl_is.arb
+++ b/apps/flutter_parent/lib/l10n/res/intl_is.arb
@@ -1,5 +1,5 @@
{
- "@@last_modified": "2023-04-14T11:04:46.988317",
+ "@@last_modified": "2023-08-25T11:04:20.901151",
"alertsLabel": "Viðvaranir",
"@alertsLabel": {
"description": "The label for the Alerts tab",
@@ -2742,5 +2742,12 @@
"type": "text",
"placeholders_order": [],
"placeholders": {}
+ },
+ "Instructure logo": "Merki Instructure",
+ "@Instructure logo": {
+ "description": "Semantics label for the Instructure logo on the about page",
+ "type": "text",
+ "placeholders_order": [],
+ "placeholders": {}
}
}
\ No newline at end of file
diff --git a/apps/flutter_parent/lib/l10n/res/intl_it.arb b/apps/flutter_parent/lib/l10n/res/intl_it.arb
index 2b0d6ee265..a3dcc59070 100644
--- a/apps/flutter_parent/lib/l10n/res/intl_it.arb
+++ b/apps/flutter_parent/lib/l10n/res/intl_it.arb
@@ -1,5 +1,5 @@
{
- "@@last_modified": "2023-04-14T11:04:46.988317",
+ "@@last_modified": "2023-08-25T11:04:20.901151",
"alertsLabel": "Avvisi",
"@alertsLabel": {
"description": "The label for the Alerts tab",
@@ -2742,5 +2742,12 @@
"type": "text",
"placeholders_order": [],
"placeholders": {}
+ },
+ "Instructure logo": "Logo Instructure",
+ "@Instructure logo": {
+ "description": "Semantics label for the Instructure logo on the about page",
+ "type": "text",
+ "placeholders_order": [],
+ "placeholders": {}
}
}
\ No newline at end of file
diff --git a/apps/flutter_parent/lib/l10n/res/intl_ja.arb b/apps/flutter_parent/lib/l10n/res/intl_ja.arb
index 9b16649315..4a6e294d49 100644
--- a/apps/flutter_parent/lib/l10n/res/intl_ja.arb
+++ b/apps/flutter_parent/lib/l10n/res/intl_ja.arb
@@ -1,5 +1,5 @@
{
- "@@last_modified": "2023-04-14T11:04:46.988317",
+ "@@last_modified": "2023-08-25T11:04:20.901151",
"alertsLabel": "アラート",
"@alertsLabel": {
"description": "The label for the Alerts tab",
@@ -2742,5 +2742,12 @@
"type": "text",
"placeholders_order": [],
"placeholders": {}
+ },
+ "Instructure logo": "Instructure ロゴ",
+ "@Instructure logo": {
+ "description": "Semantics label for the Instructure logo on the about page",
+ "type": "text",
+ "placeholders_order": [],
+ "placeholders": {}
}
}
\ No newline at end of file
diff --git a/apps/flutter_parent/lib/l10n/res/intl_mi.arb b/apps/flutter_parent/lib/l10n/res/intl_mi.arb
index 488c681b32..8f5f31e169 100644
--- a/apps/flutter_parent/lib/l10n/res/intl_mi.arb
+++ b/apps/flutter_parent/lib/l10n/res/intl_mi.arb
@@ -1,5 +1,5 @@
{
- "@@last_modified": "2023-04-14T11:04:46.988317",
+ "@@last_modified": "2023-08-25T11:04:20.901151",
"alertsLabel": "He whakamataara",
"@alertsLabel": {
"description": "The label for the Alerts tab",
@@ -2742,5 +2742,12 @@
"type": "text",
"placeholders_order": [],
"placeholders": {}
+ },
+ "Instructure logo": "Tohu Instructure",
+ "@Instructure logo": {
+ "description": "Semantics label for the Instructure logo on the about page",
+ "type": "text",
+ "placeholders_order": [],
+ "placeholders": {}
}
}
\ No newline at end of file
diff --git a/apps/flutter_parent/lib/l10n/res/intl_ms.arb b/apps/flutter_parent/lib/l10n/res/intl_ms.arb
index 2e83b495d5..3efac2b1a0 100644
--- a/apps/flutter_parent/lib/l10n/res/intl_ms.arb
+++ b/apps/flutter_parent/lib/l10n/res/intl_ms.arb
@@ -1,5 +1,5 @@
{
- "@@last_modified": "2023-04-14T11:04:46.988317",
+ "@@last_modified": "2023-08-25T11:04:20.901151",
"alertsLabel": "Isyarat",
"@alertsLabel": {
"description": "The label for the Alerts tab",
@@ -2742,5 +2742,12 @@
"type": "text",
"placeholders_order": [],
"placeholders": {}
+ },
+ "Instructure logo": "Logo Instructure",
+ "@Instructure logo": {
+ "description": "Semantics label for the Instructure logo on the about page",
+ "type": "text",
+ "placeholders_order": [],
+ "placeholders": {}
}
}
\ No newline at end of file
diff --git a/apps/flutter_parent/lib/l10n/res/intl_nb.arb b/apps/flutter_parent/lib/l10n/res/intl_nb.arb
index c272e85eba..be343afbd5 100644
--- a/apps/flutter_parent/lib/l10n/res/intl_nb.arb
+++ b/apps/flutter_parent/lib/l10n/res/intl_nb.arb
@@ -1,5 +1,5 @@
{
- "@@last_modified": "2023-04-14T11:04:46.988317",
+ "@@last_modified": "2023-08-25T11:04:20.901151",
"alertsLabel": "Varsler",
"@alertsLabel": {
"description": "The label for the Alerts tab",
@@ -2742,5 +2742,12 @@
"type": "text",
"placeholders_order": [],
"placeholders": {}
+ },
+ "Instructure logo": "Instructure-logo",
+ "@Instructure logo": {
+ "description": "Semantics label for the Instructure logo on the about page",
+ "type": "text",
+ "placeholders_order": [],
+ "placeholders": {}
}
}
\ No newline at end of file
diff --git a/apps/flutter_parent/lib/l10n/res/intl_nb_instk12.arb b/apps/flutter_parent/lib/l10n/res/intl_nb_instk12.arb
index 75c8d09084..85d1ddabb1 100644
--- a/apps/flutter_parent/lib/l10n/res/intl_nb_instk12.arb
+++ b/apps/flutter_parent/lib/l10n/res/intl_nb_instk12.arb
@@ -1,5 +1,5 @@
{
- "@@last_modified": "2023-04-14T11:04:46.988317",
+ "@@last_modified": "2023-08-25T11:04:20.901151",
"alertsLabel": "Varsler",
"@alertsLabel": {
"description": "The label for the Alerts tab",
@@ -2742,5 +2742,12 @@
"type": "text",
"placeholders_order": [],
"placeholders": {}
+ },
+ "Instructure logo": "Instructure-logo",
+ "@Instructure logo": {
+ "description": "Semantics label for the Instructure logo on the about page",
+ "type": "text",
+ "placeholders_order": [],
+ "placeholders": {}
}
}
\ No newline at end of file
diff --git a/apps/flutter_parent/lib/l10n/res/intl_nl.arb b/apps/flutter_parent/lib/l10n/res/intl_nl.arb
index 27668187aa..6faf9e6f07 100644
--- a/apps/flutter_parent/lib/l10n/res/intl_nl.arb
+++ b/apps/flutter_parent/lib/l10n/res/intl_nl.arb
@@ -1,5 +1,5 @@
{
- "@@last_modified": "2023-04-14T11:04:46.988317",
+ "@@last_modified": "2023-08-25T11:04:20.901151",
"alertsLabel": "Waarschuwingen",
"@alertsLabel": {
"description": "The label for the Alerts tab",
@@ -2742,5 +2742,12 @@
"type": "text",
"placeholders_order": [],
"placeholders": {}
+ },
+ "Instructure logo": "Logo Instructure",
+ "@Instructure logo": {
+ "description": "Semantics label for the Instructure logo on the about page",
+ "type": "text",
+ "placeholders_order": [],
+ "placeholders": {}
}
}
\ No newline at end of file
diff --git a/apps/flutter_parent/lib/l10n/res/intl_pl.arb b/apps/flutter_parent/lib/l10n/res/intl_pl.arb
index dcc306e354..07affc143d 100644
--- a/apps/flutter_parent/lib/l10n/res/intl_pl.arb
+++ b/apps/flutter_parent/lib/l10n/res/intl_pl.arb
@@ -1,5 +1,5 @@
{
- "@@last_modified": "2023-04-14T11:04:46.988317",
+ "@@last_modified": "2023-08-25T11:04:20.901151",
"alertsLabel": "Alerty",
"@alertsLabel": {
"description": "The label for the Alerts tab",
@@ -2742,5 +2742,12 @@
"type": "text",
"placeholders_order": [],
"placeholders": {}
+ },
+ "Instructure logo": "Logo Instructure",
+ "@Instructure logo": {
+ "description": "Semantics label for the Instructure logo on the about page",
+ "type": "text",
+ "placeholders_order": [],
+ "placeholders": {}
}
}
\ No newline at end of file
diff --git a/apps/flutter_parent/lib/l10n/res/intl_pt_BR.arb b/apps/flutter_parent/lib/l10n/res/intl_pt_BR.arb
index 58ba0f7119..6a389c22ec 100644
--- a/apps/flutter_parent/lib/l10n/res/intl_pt_BR.arb
+++ b/apps/flutter_parent/lib/l10n/res/intl_pt_BR.arb
@@ -1,5 +1,5 @@
{
- "@@last_modified": "2023-04-14T11:04:46.988317",
+ "@@last_modified": "2023-08-25T11:04:20.901151",
"alertsLabel": "Alertas",
"@alertsLabel": {
"description": "The label for the Alerts tab",
@@ -2742,5 +2742,12 @@
"type": "text",
"placeholders_order": [],
"placeholders": {}
+ },
+ "Instructure logo": "Logotipo Instructure",
+ "@Instructure logo": {
+ "description": "Semantics label for the Instructure logo on the about page",
+ "type": "text",
+ "placeholders_order": [],
+ "placeholders": {}
}
}
\ No newline at end of file
diff --git a/apps/flutter_parent/lib/l10n/res/intl_pt_PT.arb b/apps/flutter_parent/lib/l10n/res/intl_pt_PT.arb
index 6505af0e5a..2c6eaab49a 100644
--- a/apps/flutter_parent/lib/l10n/res/intl_pt_PT.arb
+++ b/apps/flutter_parent/lib/l10n/res/intl_pt_PT.arb
@@ -1,5 +1,5 @@
{
- "@@last_modified": "2023-04-14T11:04:46.988317",
+ "@@last_modified": "2023-08-25T11:04:20.901151",
"alertsLabel": "Alertas",
"@alertsLabel": {
"description": "The label for the Alerts tab",
@@ -2742,5 +2742,12 @@
"type": "text",
"placeholders_order": [],
"placeholders": {}
+ },
+ "Instructure logo": "Logótipo da Instructure",
+ "@Instructure logo": {
+ "description": "Semantics label for the Instructure logo on the about page",
+ "type": "text",
+ "placeholders_order": [],
+ "placeholders": {}
}
}
\ No newline at end of file
diff --git a/apps/flutter_parent/lib/l10n/res/intl_ru.arb b/apps/flutter_parent/lib/l10n/res/intl_ru.arb
index 1f5673f194..8a19ee89e1 100644
--- a/apps/flutter_parent/lib/l10n/res/intl_ru.arb
+++ b/apps/flutter_parent/lib/l10n/res/intl_ru.arb
@@ -1,5 +1,5 @@
{
- "@@last_modified": "2023-04-14T11:04:46.988317",
+ "@@last_modified": "2023-08-25T11:04:20.901151",
"alertsLabel": "Предупреждения",
"@alertsLabel": {
"description": "The label for the Alerts tab",
@@ -2742,5 +2742,12 @@
"type": "text",
"placeholders_order": [],
"placeholders": {}
+ },
+ "Instructure logo": "Логотип Instructure",
+ "@Instructure logo": {
+ "description": "Semantics label for the Instructure logo on the about page",
+ "type": "text",
+ "placeholders_order": [],
+ "placeholders": {}
}
}
\ No newline at end of file
diff --git a/apps/flutter_parent/lib/l10n/res/intl_sv.arb b/apps/flutter_parent/lib/l10n/res/intl_sv.arb
index 2520c94ae0..cf0f525594 100644
--- a/apps/flutter_parent/lib/l10n/res/intl_sv.arb
+++ b/apps/flutter_parent/lib/l10n/res/intl_sv.arb
@@ -1,5 +1,5 @@
{
- "@@last_modified": "2023-04-14T11:04:46.988317",
+ "@@last_modified": "2023-08-25T11:04:20.901151",
"alertsLabel": "Notiser",
"@alertsLabel": {
"description": "The label for the Alerts tab",
@@ -2742,5 +2742,12 @@
"type": "text",
"placeholders_order": [],
"placeholders": {}
+ },
+ "Instructure logo": "Instructure-logotyp",
+ "@Instructure logo": {
+ "description": "Semantics label for the Instructure logo on the about page",
+ "type": "text",
+ "placeholders_order": [],
+ "placeholders": {}
}
}
\ No newline at end of file
diff --git a/apps/flutter_parent/lib/l10n/res/intl_sv_instk12.arb b/apps/flutter_parent/lib/l10n/res/intl_sv_instk12.arb
index d9196a45bb..33bd40ccb6 100644
--- a/apps/flutter_parent/lib/l10n/res/intl_sv_instk12.arb
+++ b/apps/flutter_parent/lib/l10n/res/intl_sv_instk12.arb
@@ -1,5 +1,5 @@
{
- "@@last_modified": "2023-04-14T11:04:46.988317",
+ "@@last_modified": "2023-08-25T11:04:20.901151",
"alertsLabel": "Notiser",
"@alertsLabel": {
"description": "The label for the Alerts tab",
@@ -2742,5 +2742,12 @@
"type": "text",
"placeholders_order": [],
"placeholders": {}
+ },
+ "Instructure logo": "Instructure-logotyp",
+ "@Instructure logo": {
+ "description": "Semantics label for the Instructure logo on the about page",
+ "type": "text",
+ "placeholders_order": [],
+ "placeholders": {}
}
}
\ No newline at end of file
diff --git a/apps/flutter_parent/lib/l10n/res/intl_th.arb b/apps/flutter_parent/lib/l10n/res/intl_th.arb
index 4b9c774051..e83fce0a50 100644
--- a/apps/flutter_parent/lib/l10n/res/intl_th.arb
+++ b/apps/flutter_parent/lib/l10n/res/intl_th.arb
@@ -1,5 +1,5 @@
{
- "@@last_modified": "2023-04-14T11:04:46.988317",
+ "@@last_modified": "2023-08-25T11:04:20.901151",
"alertsLabel": "แจ้งเตือน",
"@alertsLabel": {
"description": "The label for the Alerts tab",
@@ -2742,5 +2742,12 @@
"type": "text",
"placeholders_order": [],
"placeholders": {}
+ },
+ "Instructure logo": "โลโก้ Instructure",
+ "@Instructure logo": {
+ "description": "Semantics label for the Instructure logo on the about page",
+ "type": "text",
+ "placeholders_order": [],
+ "placeholders": {}
}
}
\ No newline at end of file
diff --git a/apps/flutter_parent/lib/l10n/res/intl_vi.arb b/apps/flutter_parent/lib/l10n/res/intl_vi.arb
index 466548adb1..13ce5f0ccf 100644
--- a/apps/flutter_parent/lib/l10n/res/intl_vi.arb
+++ b/apps/flutter_parent/lib/l10n/res/intl_vi.arb
@@ -1,5 +1,5 @@
{
- "@@last_modified": "2023-04-14T11:04:46.988317",
+ "@@last_modified": "2023-08-25T11:04:20.901151",
"alertsLabel": "Cảnh Báo",
"@alertsLabel": {
"description": "The label for the Alerts tab",
@@ -2742,5 +2742,12 @@
"type": "text",
"placeholders_order": [],
"placeholders": {}
+ },
+ "Instructure logo": "Logo Instructure",
+ "@Instructure logo": {
+ "description": "Semantics label for the Instructure logo on the about page",
+ "type": "text",
+ "placeholders_order": [],
+ "placeholders": {}
}
}
\ No newline at end of file
diff --git a/apps/flutter_parent/lib/l10n/res/intl_zh.arb b/apps/flutter_parent/lib/l10n/res/intl_zh.arb
index bcb61c5d1d..ccf2a3c7c1 100644
--- a/apps/flutter_parent/lib/l10n/res/intl_zh.arb
+++ b/apps/flutter_parent/lib/l10n/res/intl_zh.arb
@@ -1,5 +1,5 @@
{
- "@@last_modified": "2023-04-14T11:04:46.988317",
+ "@@last_modified": "2023-08-25T11:04:20.901151",
"alertsLabel": "警告",
"@alertsLabel": {
"description": "The label for the Alerts tab",
@@ -2742,5 +2742,12 @@
"type": "text",
"placeholders_order": [],
"placeholders": {}
+ },
+ "Instructure logo": "Instructure 徽标",
+ "@Instructure logo": {
+ "description": "Semantics label for the Instructure logo on the about page",
+ "type": "text",
+ "placeholders_order": [],
+ "placeholders": {}
}
}
\ No newline at end of file
diff --git a/apps/flutter_parent/lib/l10n/res/intl_zh_HK.arb b/apps/flutter_parent/lib/l10n/res/intl_zh_HK.arb
index c19d37b2ac..3cb50f9e11 100644
--- a/apps/flutter_parent/lib/l10n/res/intl_zh_HK.arb
+++ b/apps/flutter_parent/lib/l10n/res/intl_zh_HK.arb
@@ -1,5 +1,5 @@
{
- "@@last_modified": "2023-04-14T11:04:46.988317",
+ "@@last_modified": "2023-08-25T11:04:20.901151",
"alertsLabel": "提醒",
"@alertsLabel": {
"description": "The label for the Alerts tab",
@@ -2742,5 +2742,12 @@
"type": "text",
"placeholders_order": [],
"placeholders": {}
+ },
+ "Instructure logo": "Instructure 標誌",
+ "@Instructure logo": {
+ "description": "Semantics label for the Instructure logo on the about page",
+ "type": "text",
+ "placeholders_order": [],
+ "placeholders": {}
}
}
\ No newline at end of file
diff --git a/apps/flutter_parent/lib/main.dart b/apps/flutter_parent/lib/main.dart
index deae3fbbe4..1ee693d05a 100644
--- a/apps/flutter_parent/lib/main.dart
+++ b/apps/flutter_parent/lib/main.dart
@@ -33,7 +33,6 @@ import 'package:flutter_parent/utils/notification_util.dart';
import 'package:flutter_parent/utils/old_app_migration.dart';
import 'package:flutter_parent/utils/remote_config_utils.dart';
import 'package:flutter_parent/utils/service_locator.dart';
-import 'package:webview_flutter/webview_flutter.dart';
import 'package:flutter_downloader/flutter_downloader.dart';
void main() async {
diff --git a/apps/flutter_parent/lib/models/course_grade.dart b/apps/flutter_parent/lib/models/course_grade.dart
index dfe9b14b76..681be6364f 100644
--- a/apps/flutter_parent/lib/models/course_grade.dart
+++ b/apps/flutter_parent/lib/models/course_grade.dart
@@ -69,7 +69,7 @@ class CourseGrade {
/// If the course contains no valid current grade or score, this flag will be true. This is usually represented in the
/// UI with "N/A".
bool noCurrentGrade() =>
- _getCurrentScore() == null && (currentGrade() == null || currentGrade()!.contains('N/A') || currentGrade()!.isEmpty);
+ currentScore() == null && (currentGrade() == null || currentGrade()!.contains('N/A') || currentGrade()!.isEmpty);
bool _hasActiveGradingPeriod() =>
!_forceAllPeriods &&
diff --git a/apps/flutter_parent/lib/screens/assignments/assignment_details_screen.dart b/apps/flutter_parent/lib/screens/assignments/assignment_details_screen.dart
index 1a3ed256ed..9043221d75 100644
--- a/apps/flutter_parent/lib/screens/assignments/assignment_details_screen.dart
+++ b/apps/flutter_parent/lib/screens/assignments/assignment_details_screen.dart
@@ -26,9 +26,14 @@ import 'package:flutter_parent/utils/common_widgets/web_view/html_description_ti
import 'package:flutter_parent/utils/core_extensions/date_time_extensions.dart';
import 'package:flutter_parent/utils/design/canvas_icons_solid.dart';
import 'package:flutter_parent/utils/design/parent_theme.dart';
+import 'package:flutter_parent/utils/notification_util.dart';
+import 'package:flutter_parent/utils/permission_handler.dart';
import 'package:flutter_parent/utils/quick_nav.dart';
import 'package:flutter_parent/utils/service_locator.dart';
import 'package:flutter_svg/svg.dart';
+import 'package:permission_handler/permission_handler.dart';
+
+import '../../utils/veneers/flutter_snackbar_veneer.dart';
class AssignmentDetailsScreen extends StatefulWidget {
final String courseId;
@@ -72,6 +77,8 @@ class _AssignmentDetailsScreenState extends State {
Future _loadReminder() => _interactor.loadReminder(widget.assignmentId);
+ PermissionHandler get _permissionHandler => locator();
+
@override
Widget build(BuildContext context) {
return FutureBuilder(
@@ -313,6 +320,15 @@ class _AssignmentDetailsScreenState extends State {
DateTime? date;
TimeOfDay? time;
+ final permissionResult = await _permissionHandler.checkPermissionStatus(Permission.scheduleExactAlarm);
+ if (permissionResult != PermissionStatus.granted) {
+ final permissionGranted = await locator().requestScheduleExactAlarmPermission();
+ if (permissionGranted != true) {
+ locator().showSnackBar(context, L10n(context).needToEnablePermission);
+ return;
+ }
+ }
+
date = await showDatePicker(
context: context,
initialDate: initialDate,
diff --git a/apps/flutter_parent/lib/screens/help/terms_of_use_screen.dart b/apps/flutter_parent/lib/screens/help/terms_of_use_screen.dart
index 531152fe15..68756af170 100644
--- a/apps/flutter_parent/lib/screens/help/terms_of_use_screen.dart
+++ b/apps/flutter_parent/lib/screens/help/terms_of_use_screen.dart
@@ -75,10 +75,12 @@ class _TermsOfUseScreenState extends State {
// Content
return WebView(
- darkMode: ParentTheme.of(context)?.isWebViewDarkMode,
onWebViewCreated: (controller) {
- controller.loadHtml(snapshot.data!.content!, horizontalPadding: 16);
- },
+ controller.loadHtml(snapshot.data!.content!,
+ horizontalPadding: 16,
+ darkMode:
+ ParentTheme.of(context)?.isWebViewDarkMode ?? false);
+ },
navigationDelegate: _handleNavigation
);
},
diff --git a/apps/flutter_parent/lib/screens/web_login/web_login_screen.dart b/apps/flutter_parent/lib/screens/web_login/web_login_screen.dart
index 1b8d04272c..dd8f5e7c08 100644
--- a/apps/flutter_parent/lib/screens/web_login/web_login_screen.dart
+++ b/apps/flutter_parent/lib/screens/web_login/web_login_screen.dart
@@ -134,7 +134,6 @@ class _WebLoginScreenState extends State {
navigationDelegate: (request) =>
_navigate(context, request, verifyResult),
javascriptMode: JavascriptMode.unrestricted,
- darkMode: ParentTheme.of(context)?.isWebViewDarkMode,
userAgent: ApiPrefs.getUserAgent(),
onPageFinished: (url) => _pageFinished(url, verifyResult),
onPageStarted: (url) => _pageStarted(url),
@@ -243,16 +242,15 @@ class _WebLoginScreenState extends State {
/// Load the authenticated url with any necessary cookies
void _loadAuthUrl() async {
_showLoadingState();
- CookieManager().clearCookies();
+ final cookieManager = CookieManager();
+ cookieManager.clearCookies();
if (widget.loginFlow == LoginFlow.siteAdmin) {
- await _controller?.setAcceptThirdPartyCookies(true);
if (_domain.contains('.instructure.com')) {
- String cookie = 'canvas_sa_delegated=1;domain=.instructure.com;path=/;';
- await _controller?.setCookie(_domain, cookie);
- await _controller?.setCookie('.instructure.com', cookie);
+ cookieManager.setCookie(WebViewCookie(name: 'canvas_sa_delegated', value: '1', domain: _domain));
+ cookieManager.setCookie(WebViewCookie(name: 'canvas_sa_delegated', value: '1', domain: '.instructure.com'));
} else {
- await _controller?.setCookie(_domain, 'canvas_sa_delegated=1');
+ cookieManager.setCookie(WebViewCookie(name: 'canvas_sa_delegated', value: '1', domain: _domain));
}
}
diff --git a/apps/flutter_parent/lib/utils/common_widgets/web_view/canvas_web_view.dart b/apps/flutter_parent/lib/utils/common_widgets/web_view/canvas_web_view.dart
index 1a1a21ee17..4052a2549f 100644
--- a/apps/flutter_parent/lib/utils/common_widgets/web_view/canvas_web_view.dart
+++ b/apps/flutter_parent/lib/utils/common_widgets/web_view/canvas_web_view.dart
@@ -230,14 +230,15 @@ class _ResizingWebViewState extends State<_ResizingWebView> with WidgetsBindingO
if (_content != widgetContent) {
_height = widget.initialHeight;
_content = widgetContent!;
- _controller?.loadHtml(_content, horizontalPadding: widget.horizontalPadding);
+ _controller?.loadHtml(_content,
+ horizontalPadding: widget.horizontalPadding,
+ darkMode: ParentTheme.of(context)?.isWebViewDarkMode ?? false);
}
Widget child = WebView(
javascriptMode: JavascriptMode.unrestricted,
onPageFinished: _handlePageLoaded,
onWebViewCreated: _handleWebViewCreated,
- darkMode: ParentTheme.of(context)?.isWebViewDarkMode == true,
navigationDelegate: _handleNavigation,
gestureRecognizers: _webViewGestures(),
javascriptChannels: _webViewChannels(),
@@ -260,7 +261,10 @@ class _ResizingWebViewState extends State<_ResizingWebView> with WidgetsBindingO
}
void _handleWebViewCreated(WebViewController webViewController) async {
- webViewController.loadHtml(_content, baseUrl: ApiPrefs.getDomain(), horizontalPadding: widget.horizontalPadding);
+ webViewController.loadHtml(_content,
+ baseUrl: ApiPrefs.getDomain(),
+ horizontalPadding: widget.horizontalPadding,
+ darkMode: ParentTheme.of(context)?.isWebViewDarkMode ?? false);
_controller = webViewController;
}
diff --git a/apps/flutter_parent/lib/utils/common_widgets/web_view/simple_web_view_screen.dart b/apps/flutter_parent/lib/utils/common_widgets/web_view/simple_web_view_screen.dart
index 7bcbb880d5..cc186be9dc 100644
--- a/apps/flutter_parent/lib/utils/common_widgets/web_view/simple_web_view_screen.dart
+++ b/apps/flutter_parent/lib/utils/common_widgets/web_view/simple_web_view_screen.dart
@@ -48,7 +48,6 @@ class _SimpleWebViewScreenState extends State {
body: WebView(
javascriptMode: JavascriptMode.unrestricted,
userAgent: ApiPrefs.getUserAgent(),
- darkMode: ParentTheme.of(context)?.isWebViewDarkMode,
gestureRecognizers: Set()..add(Factory(() => WebViewGestureRecognizer())),
navigationDelegate: _handleNavigation,
onWebViewCreated: (controller) {
diff --git a/apps/flutter_parent/lib/utils/notification_util.dart b/apps/flutter_parent/lib/utils/notification_util.dart
index 5ea59291ad..3c1307a516 100644
--- a/apps/flutter_parent/lib/utils/notification_util.dart
+++ b/apps/flutter_parent/lib/utils/notification_util.dart
@@ -33,20 +33,18 @@ class NotificationUtil {
static const notificationChannelReminders =
'com.instructure.parentapp/reminders';
- static FlutterLocalNotificationsPlugin? _plugin;
+ static AndroidFlutterLocalNotificationsPlugin? _plugin;
@visibleForTesting
- static initForTest(FlutterLocalNotificationsPlugin plugin) {
+ static initForTest(AndroidFlutterLocalNotificationsPlugin plugin) {
_plugin = plugin;
}
static Future init(Completer? appCompleter) async {
- var initializationSettings = InitializationSettings(
- android: AndroidInitializationSettings('ic_notification_canvas_logo')
- );
+ var initializationSettings = AndroidInitializationSettings('ic_notification_canvas_logo');
if (_plugin == null) {
- _plugin = FlutterLocalNotificationsPlugin();
+ _plugin = AndroidFlutterLocalNotificationsPlugin();
}
await _plugin!.initialize(
@@ -104,12 +102,10 @@ class NotificationUtil {
..type = NotificationPayloadType.reminder
..data = json.encode(serialize(reminder)));
- final notificationDetails = NotificationDetails(
- android: AndroidNotificationDetails(
+ final notificationDetails = AndroidNotificationDetails(
notificationChannelReminders,
l10n.remindersNotificationChannelName,
channelDescription: l10n.remindersNotificationChannelDescription
- )
);
if (reminder.type == Reminder.TYPE_ASSIGNMENT) {
@@ -130,8 +126,8 @@ class NotificationUtil {
body,
date,
notificationDetails,
- payload: json.encode(serialize(payload)),
- uiLocalNotificationDateInterpretation: UILocalNotificationDateInterpretation.absoluteTime,
+ scheduleMode: AndroidScheduleMode.exactAllowWhileIdle,
+ payload: json.encode(serialize(payload))
);
}
@@ -140,4 +136,8 @@ class NotificationUtil {
Future deleteNotifications(List ids) async {
for (int id in ids) await _plugin!.cancel(id);
}
+
+ Future requestScheduleExactAlarmPermission() async {
+ return await _plugin?.requestExactAlarmsPermission();
+ }
}
diff --git a/apps/flutter_parent/lib/utils/web_view_utils.dart b/apps/flutter_parent/lib/utils/web_view_utils.dart
index cd46d97c27..ff55e34412 100644
--- a/apps/flutter_parent/lib/utils/web_view_utils.dart
+++ b/apps/flutter_parent/lib/utils/web_view_utils.dart
@@ -30,15 +30,20 @@ extension WebViewUtils on WebViewController {
String? html, {
String? baseUrl,
Map? headers,
- double horizontalPadding = 0})
+ double horizontalPadding = 0,
+ bool darkMode = false})
async {
String fileText = await rootBundle.loadString('assets/html/html_wrapper.html');
html = _applyWorkAroundForDoubleSlashesAsUrlSource(html);
html = _addProtocolToLinks(html);
html = _checkForMathTags(html);
html = fileText.replaceAll('{CANVAS_CONTENT}', html);
+ html = html.replaceAll('{BACKGROUND}', darkMode ? '#000000' : '#ffffff');
+ html = html.replaceAll('{COLOR}', darkMode ? '#ffffff' : '#000000');
+ html = html.replaceAll('{LINK_COLOR}', darkMode ? '#1283C4' : '#0374B5');
+ html = html.replaceAll('{VISITED_LINK_COLOR}', darkMode ? '#C74BAF' : '#BF32A4');
html = html.replaceAll('{PADDING}', horizontalPadding.toString());
- this.loadData(baseUrl, html, 'text/html', 'utf-8');
+ this.loadHtmlString(html, baseUrl: baseUrl);
}
/**
diff --git a/apps/flutter_parent/plugins/webview_flutter/LICENSE b/apps/flutter_parent/plugins/webview_flutter/LICENSE
deleted file mode 100644
index ad33cf3c3e..0000000000
--- a/apps/flutter_parent/plugins/webview_flutter/LICENSE
+++ /dev/null
@@ -1,25 +0,0 @@
-Copyright 2018 The Chromium Authors. All rights reserved.
-
-Redistribution and use in source and binary forms, with or without modification,
-are permitted provided that the following conditions are met:
-
- * Redistributions of source code must retain the above copyright
- notice, this list of conditions and the following disclaimer.
- * Redistributions in binary form must reproduce the above
- copyright notice, this list of conditions and the following
- disclaimer in the documentation and/or other materials provided
- with the distribution.
- * Neither the name of Google Inc. nor the names of its
- contributors may be used to endorse or promote products derived
- from this software without specific prior written permission.
-
-THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
-ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
-WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
-DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR
-ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
-(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
-LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
-ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
-(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
-SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
diff --git a/apps/flutter_parent/plugins/webview_flutter/android/build.gradle b/apps/flutter_parent/plugins/webview_flutter/android/build.gradle
deleted file mode 100644
index 9e807667a5..0000000000
--- a/apps/flutter_parent/plugins/webview_flutter/android/build.gradle
+++ /dev/null
@@ -1,41 +0,0 @@
-group 'io.flutter.plugins.webviewflutter'
-version '1.0-SNAPSHOT'
-
-buildscript {
- repositories {
- google()
- mavenCentral()
- }
-
- dependencies {
- classpath "com.android.tools.build:gradle:7.4.2"
- }
-}
-
-rootProject.allprojects {
- repositories {
- google()
- mavenCentral()
- }
-}
-
-apply plugin: 'com.android.library'
-
-android {
- compileSdkVersion 33
-
- defaultConfig {
- minSdkVersion 21
- testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
- }
- lintOptions {
- disable 'InvalidPackage'
- }
-
- dependencies {
- implementation 'androidx.annotation:annotation:1.0.0'
- implementation 'androidx.webkit:webkit:1.7.0'
- }
-
- namespace 'io.flutter.plugins.webviewflutter'
-}
diff --git a/apps/flutter_parent/plugins/webview_flutter/android/settings.gradle b/apps/flutter_parent/plugins/webview_flutter/android/settings.gradle
deleted file mode 100644
index 5be7a4b4c6..0000000000
--- a/apps/flutter_parent/plugins/webview_flutter/android/settings.gradle
+++ /dev/null
@@ -1 +0,0 @@
-rootProject.name = 'webview_flutter'
diff --git a/apps/flutter_parent/plugins/webview_flutter/android/src/main/AndroidManifest.xml b/apps/flutter_parent/plugins/webview_flutter/android/src/main/AndroidManifest.xml
deleted file mode 100644
index a087f2c75c..0000000000
--- a/apps/flutter_parent/plugins/webview_flutter/android/src/main/AndroidManifest.xml
+++ /dev/null
@@ -1,2 +0,0 @@
-
-
diff --git a/apps/flutter_parent/plugins/webview_flutter/android/src/main/java/io/flutter/plugins/webviewflutter/DisplayListenerProxy.java b/apps/flutter_parent/plugins/webview_flutter/android/src/main/java/io/flutter/plugins/webviewflutter/DisplayListenerProxy.java
deleted file mode 100644
index 1273e73496..0000000000
--- a/apps/flutter_parent/plugins/webview_flutter/android/src/main/java/io/flutter/plugins/webviewflutter/DisplayListenerProxy.java
+++ /dev/null
@@ -1,143 +0,0 @@
-package io.flutter.plugins.webviewflutter;
-
-import static android.hardware.display.DisplayManager.DisplayListener;
-
-import android.annotation.TargetApi;
-import android.hardware.display.DisplayManager;
-import android.os.Build;
-import android.util.Log;
-import java.lang.reflect.Field;
-import java.util.ArrayList;
-
-/**
- * Works around an Android WebView bug by filtering some DisplayListener invocations.
- *
- *
Older Android WebView versions had assumed that when {@link DisplayListener#onDisplayChanged}
- * is invoked, the display ID it is provided is of a valid display. However it turns out that when a
- * display is removed Android may call onDisplayChanged with the ID of the removed display, in this
- * case the Android WebView code tries to fetch and use the display with this ID and crashes with an
- * NPE.
- *
- *
This issue was fixed in the Android WebView code in
- * https://chromium-review.googlesource.com/517913 which is available starting WebView version
- * 58.0.3029.125 however older webviews in the wild still have this issue.
- *
- *
Since Flutter removes virtual displays whenever a platform view is resized the webview crash
- * is more likely to happen than other apps. And users were reporting this issue see:
- * https://github.com/flutter/flutter/issues/30420
- *
- *
This class works around the webview bug by unregistering the WebView's DisplayListener, and
- * instead registering its own DisplayListener which delegates the callbacks to the WebView's
- * listener unless it's a onDisplayChanged for an invalid display.
- *
- *
I did not find a clean way to get a handle of the WebView's DisplayListener so I'm using
- * reflection to fetch all registered listeners before and after initializing a webview. In the
- * first initialization of a webview within the process the difference between the lists is the
- * webview's display listener.
- */
-@TargetApi(Build.VERSION_CODES.KITKAT)
-class DisplayListenerProxy {
- private static final String TAG = "DisplayListenerProxy";
-
- private ArrayList listenersBeforeWebView;
-
- /** Should be called prior to the webview's initialization. */
- void onPreWebViewInitialization(DisplayManager displayManager) {
- listenersBeforeWebView = yoinkDisplayListeners(displayManager);
- }
-
- /** Should be called after the webview's initialization. */
- void onPostWebViewInitialization(final DisplayManager displayManager) {
- final ArrayList webViewListeners = yoinkDisplayListeners(displayManager);
- // We recorded the list of listeners prior to initializing webview, any new listeners we see
- // after initializing the webview are listeners added by the webview.
- webViewListeners.removeAll(listenersBeforeWebView);
-
- if (webViewListeners.isEmpty()) {
- // The Android WebView registers a single display listener per process (even if there
- // are multiple WebView instances) so this list is expected to be non-empty only the
- // first time a webview is initialized.
- // Note that in an add2app scenario if the application had instantiated a non Flutter
- // WebView prior to instantiating the Flutter WebView we are not able to get a reference
- // to the WebView's display listener and can't work around the bug.
- //
- // This means that webview resizes in add2app Flutter apps with a non Flutter WebView
- // running on a system with a webview prior to 58.0.3029.125 may crash (the Android's
- // behavior seems to be racy so it doesn't always happen).
- return;
- }
-
- for (DisplayListener webViewListener : webViewListeners) {
- // Note that while DisplayManager.unregisterDisplayListener throws when given an
- // unregistered listener, this isn't an issue as the WebView code never calls
- // unregisterDisplayListener.
- displayManager.unregisterDisplayListener(webViewListener);
-
- // We never explicitly unregister this listener as the webview's listener is never
- // unregistered (it's released when the process is terminated).
- displayManager.registerDisplayListener(
- new DisplayListener() {
- @Override
- public void onDisplayAdded(int displayId) {
- for (DisplayListener webViewListener : webViewListeners) {
- webViewListener.onDisplayAdded(displayId);
- }
- }
-
- @Override
- public void onDisplayRemoved(int displayId) {
- for (DisplayListener webViewListener : webViewListeners) {
- webViewListener.onDisplayRemoved(displayId);
- }
- }
-
- @Override
- public void onDisplayChanged(int displayId) {
- if (displayManager.getDisplay(displayId) == null) {
- return;
- }
- for (DisplayListener webViewListener : webViewListeners) {
- webViewListener.onDisplayChanged(displayId);
- }
- }
- },
- null);
- }
- }
-
- @SuppressWarnings({"unchecked", "PrivateApi"})
- private static ArrayList yoinkDisplayListeners(DisplayManager displayManager) {
- if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.P) {
- // We cannot use reflection on Android P, but it shouldn't matter as it shipped
- // with WebView 66.0.3359.158 and the WebView version the bug this code is working around was
- // fixed in 61.0.3116.0.
- return new ArrayList<>();
- }
- try {
- Field displayManagerGlobalField = DisplayManager.class.getDeclaredField("mGlobal");
- displayManagerGlobalField.setAccessible(true);
- Object displayManagerGlobal = displayManagerGlobalField.get(displayManager);
- Field displayListenersField =
- displayManagerGlobal.getClass().getDeclaredField("mDisplayListeners");
- displayListenersField.setAccessible(true);
- ArrayList