summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJeff Epler <jepler@gmail.com>2020-08-12 13:26:12 -0500
committerJeff Epler <jepler@gmail.com>2020-08-12 13:26:12 -0500
commit58a1361d3e36f080c6128542223202d6fcbf7845 (patch)
treeb7bdc0ac77008659deb0082b9690e7ec6ececeb1
parent813dcd1b732443a54cdfc8ab1b9503e4e72dac5d (diff)
parentbbac68e77c8dac0b8b20825bbf83a09a3eaf2559 (diff)
Merge remote-tracking branch 'origin/main' into ja-firmware-size
-rw-r--r--lib/mp-readline/readline.c67
-rw-r--r--locale/ID.po244
-rw-r--r--locale/circuitpython.pot35
-rw-r--r--locale/cs.po217
-rw-r--r--locale/de_DE.po333
-rw-r--r--locale/es.po356
-rw-r--r--locale/fil.po320
-rw-r--r--locale/fr.po374
-rw-r--r--locale/hi.po198
-rw-r--r--locale/it_IT.po319
-rw-r--r--locale/ko.po218
-rw-r--r--locale/nl.po347
-rw-r--r--locale/pl.po319
-rw-r--r--locale/pt_BR.po343
-rw-r--r--locale/sv.po344
-rw-r--r--locale/zh_Latn_pinyin.po325
-rwxr-xr-xmain.c2
-rw-r--r--ports/atmel-samd/Makefile2
-rwxr-xr-xports/atmel-samd/tools/mksdiodata.py (renamed from tools/mksdiodata.py)0
-rw-r--r--ports/esp32s2/Makefile1
-rw-r--r--ports/esp32s2/boards/espressif_saola_1_wroom/mpconfigboard.h2
-rw-r--r--ports/esp32s2/boards/espressif_saola_1_wroom/mpconfigboard.mk2
-rw-r--r--ports/esp32s2/boards/espressif_saola_1_wrover/mpconfigboard.h2
-rw-r--r--ports/esp32s2/boards/espressif_saola_1_wrover/mpconfigboard.mk2
-rw-r--r--ports/esp32s2/boards/espressif_saola_1_wrover/pins.c2
-rw-r--r--ports/esp32s2/boards/unexpectedmaker_feathers2/mpconfigboard.mk3
-rw-r--r--ports/esp32s2/common-hal/microcontroller/Pin.c33
-rw-r--r--ports/esp32s2/common-hal/microcontroller/Pin.h4
-rw-r--r--ports/esp32s2/common-hal/neopixel_write/__init__.c98
-rw-r--r--ports/esp32s2/common-hal/pulseio/PWMOut.c22
-rw-r--r--ports/esp32s2/mpconfigport.mk25
-rw-r--r--ports/esp32s2/peripherals/rmt.c46
-rw-r--r--ports/esp32s2/peripherals/rmt.h37
-rw-r--r--ports/nrf/boards/makerdiary_m60_keyboard/mpconfigboard.h7
-rw-r--r--ports/nrf/supervisor/port.c8
-rw-r--r--ports/nrf/supervisor/qspi_flash.c42
-rw-r--r--ports/stm/boards/feather_stm32f405_express/pins.c16
-rw-r--r--ports/stm/common-hal/busio/I2C.c2
-rw-r--r--ports/stm/common-hal/busio/SPI.c2
-rw-r--r--ports/stm/common-hal/busio/UART.c2
-rw-r--r--ports/stm/common-hal/sdioio/SDCard.c327
-rw-r--r--ports/stm/common-hal/sdioio/SDCard.h50
-rw-r--r--ports/stm/common-hal/sdioio/__init__.c0
-rw-r--r--ports/stm/common-hal/sdioio/__init__.h0
-rw-r--r--ports/stm/hal_conf/stm32_hal_conf.h2
-rw-r--r--ports/stm/mpconfigport.mk1
-rw-r--r--ports/stm/peripherals/stm32f4/stm32f405xx/periph.c22
-rw-r--r--ports/stm/peripherals/stm32f4/stm32f405xx/periph.h11
-rw-r--r--ports/stm/supervisor/port.c6
-rw-r--r--shared-bindings/support_matrix.rst15
-rw-r--r--supervisor/shared/rgb_led_status.c11
51 files changed, 2846 insertions, 2320 deletions
diff --git a/lib/mp-readline/readline.c b/lib/mp-readline/readline.c
index 432413d50..464916ca4 100644
--- a/lib/mp-readline/readline.c
+++ b/lib/mp-readline/readline.c
@@ -58,6 +58,16 @@ STATIC char *str_dup_maybe(const char *str) {
return s2;
}
+STATIC size_t count_cont_bytes(char *start, char *end) {
+ int count = 0;
+ for (char *pos = start; pos < end; pos++) {
+ if(UTF8_IS_CONT(*pos)) {
+ count++;
+ }
+ }
+ return count;
+}
+
// By default assume terminal which implements VT100 commands...
#ifndef MICROPY_HAL_HAS_VT100
#define MICROPY_HAL_HAS_VT100 (1)
@@ -92,6 +102,7 @@ typedef struct _readline_t {
int escape_seq;
int hist_cur;
size_t cursor_pos;
+ uint8_t utf8_cont_chars;
char escape_seq_buf[1];
const char *prompt;
} readline_t;
@@ -99,7 +110,8 @@ typedef struct _readline_t {
STATIC readline_t rl;
int readline_process_char(int c) {
- size_t last_line_len = rl.line->len;
+ size_t last_line_len = utf8_charlen((byte *)rl.line->buf, rl.line->len);
+ int cont_chars = 0;
int redraw_step_back = 0;
bool redraw_from_cursor = false;
int redraw_step_forward = 0;
@@ -178,6 +190,12 @@ int readline_process_char(int c) {
int nspace = 1;
#endif
+ // Check if we have moved into a UTF-8 continuation byte
+ while (UTF8_IS_CONT(rl.line->buf[rl.cursor_pos-nspace])) {
+ nspace++;
+ cont_chars++;
+ }
+
// do the backspace
vstr_cut_out_bytes(rl.line, rl.cursor_pos - nspace, nspace);
// set redraw parameters
@@ -206,12 +224,27 @@ int readline_process_char(int c) {
redraw_step_forward = compl_len;
}
#endif
- } else if (32 <= c ) {
+ } else if (32 <= c) {
// printable character
- vstr_ins_char(rl.line, rl.cursor_pos, c);
- // set redraw parameters
- redraw_from_cursor = true;
- redraw_step_forward = 1;
+ char lcp = rl.line->buf[rl.cursor_pos];
+ uint8_t cont_need = 0;
+ if (!UTF8_IS_CONT(c)) {
+ // ASCII or Lead code point
+ rl.utf8_cont_chars = 0;
+ lcp = c;
+ }else {
+ rl.utf8_cont_chars += 1;
+ }
+ if (lcp >= 0xc0 && lcp < 0xf8) {
+ cont_need = (0xe5 >> ((lcp >> 3) & 0x6)) & 3; // From unicode.c L195
+ }
+ vstr_ins_char(rl.line, rl.cursor_pos+rl.utf8_cont_chars, c);
+ // set redraw parameters if we have the entire character
+ if (rl.utf8_cont_chars == cont_need) {
+ redraw_from_cursor = true;
+ redraw_step_forward = rl.utf8_cont_chars+1;
+ cont_chars = rl.utf8_cont_chars;
+ }
}
} else if (rl.escape_seq == ESEQ_ESC) {
switch (c) {
@@ -237,6 +270,8 @@ up_arrow_key:
#endif
// up arrow
if (rl.hist_cur + 1 < (int)READLINE_HIST_SIZE && MP_STATE_PORT(readline_hist)[rl.hist_cur + 1] != NULL) {
+ // Check for continuation characters
+ cont_chars = count_cont_bytes(rl.line->buf+rl.orig_line_len, rl.line->buf+rl.cursor_pos);
// increase hist num
rl.hist_cur += 1;
// set line to history
@@ -253,6 +288,8 @@ down_arrow_key:
#endif
// down arrow
if (rl.hist_cur >= 0) {
+ // Check for continuation characters
+ cont_chars = count_cont_bytes(rl.line->buf+rl.orig_line_len, rl.line->buf+rl.cursor_pos);
// decrease hist num
rl.hist_cur -= 1;
// set line to history
@@ -272,6 +309,11 @@ right_arrow_key:
// right arrow
if (rl.cursor_pos < rl.line->len) {
redraw_step_forward = 1;
+ // Check if we have moved into a UTF-8 continuation byte
+ while (UTF8_IS_CONT(rl.line->buf[rl.cursor_pos+redraw_step_forward]) &&
+ rl.cursor_pos+redraw_step_forward < rl.line->len) {
+ redraw_step_forward++;
+ }
}
} else if (c == 'D') {
#if MICROPY_REPL_EMACS_KEYS
@@ -280,6 +322,11 @@ left_arrow_key:
// left arrow
if (rl.cursor_pos > rl.orig_line_len) {
redraw_step_back = 1;
+ // Check if we have moved into a UTF-8 continuation byte
+ while (UTF8_IS_CONT(rl.line->buf[rl.cursor_pos-redraw_step_back])) {
+ redraw_step_back++;
+ cont_chars++;
+ }
}
} else if (c == 'H') {
// home
@@ -331,18 +378,20 @@ delete_key:
// redraw command prompt, efficiently
if (redraw_step_back > 0) {
- mp_hal_move_cursor_back(redraw_step_back);
+ mp_hal_move_cursor_back(redraw_step_back-cont_chars);
rl.cursor_pos -= redraw_step_back;
}
if (redraw_from_cursor) {
- if (rl.line->len < last_line_len) {
+ if (utf8_charlen((byte *)rl.line->buf, rl.line->len) < last_line_len) {
// erase old chars
mp_hal_erase_line_from_cursor(last_line_len - rl.cursor_pos);
}
+ // Check for continuation characters
+ cont_chars = count_cont_bytes(rl.line->buf+rl.cursor_pos+redraw_step_forward, rl.line->buf+rl.line->len);
// draw new chars
mp_hal_stdout_tx_strn(rl.line->buf + rl.cursor_pos, rl.line->len - rl.cursor_pos);
// move cursor forward if needed (already moved forward by length of line, so move it back)
- mp_hal_move_cursor_back(rl.line->len - (rl.cursor_pos + redraw_step_forward));
+ mp_hal_move_cursor_back(rl.line->len - (rl.cursor_pos + redraw_step_forward) - cont_chars);
rl.cursor_pos += redraw_step_forward;
} else if (redraw_step_forward > 0) {
// draw over old chars to move cursor forwards
diff --git a/locale/ID.po b/locale/ID.po
index d39cc055d..9a1d86d26 100644
--- a/locale/ID.po
+++ b/locale/ID.po
@@ -5,7 +5,7 @@ msgid ""
msgstr ""
"Project-Id-Version: PACKAGE VERSION\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2020-08-04 18:42-0500\n"
+"POT-Creation-Date: 2020-07-28 16:57-0500\n"
"PO-Revision-Date: 2020-07-06 18:10+0000\n"
"Last-Translator: oon arfiandwi <oon.arfiandwi@gmail.com>\n"
"Language-Team: LANGUAGE <LL@li.org>\n"
@@ -72,17 +72,13 @@ msgstr ""
msgid "%q in use"
msgstr "%q sedang digunakan"
-#: extmod/moductypes.c ports/atmel-samd/common-hal/pulseio/PulseIn.c
-#: ports/cxd56/common-hal/pulseio/PulseIn.c
-#: ports/nrf/common-hal/pulseio/PulseIn.c
-#: ports/stm/common-hal/pulseio/PulseIn.c py/obj.c py/objstr.c
-#: py/objstrunicode.c
+#: py/obj.c
msgid "%q index out of range"
msgstr "%q indeks di luar batas"
#: py/obj.c
-msgid "%q indices must be integers, not %q"
-msgstr ""
+msgid "%q indices must be integers, not %s"
+msgstr "indeks %q harus bilangan bulat, bukan %s"
#: shared-bindings/vectorio/Polygon.c
msgid "%q list must be a list"
@@ -120,42 +116,6 @@ msgstr "%q() mengambil posisi argumen %d tapi %d yang diberikan"
msgid "'%q' argument required"
msgstr "'%q' argumen dibutuhkan"
-#: py/runtime.c
-msgid "'%q' object cannot assign attribute '%q'"
-msgstr ""
-
-#: py/proto.c
-msgid "'%q' object does not support '%q'"
-msgstr ""
-
-#: py/obj.c
-msgid "'%q' object does not support item assignment"
-msgstr ""
-
-#: py/obj.c
-msgid "'%q' object does not support item deletion"
-msgstr ""
-
-#: py/runtime.c
-msgid "'%q' object has no attribute '%q'"
-msgstr ""
-
-#: py/runtime.c
-msgid "'%q' object is not an iterator"
-msgstr ""
-
-#: py/objtype.c py/runtime.c
-msgid "'%q' object is not callable"
-msgstr ""
-
-#: py/runtime.c
-msgid "'%q' object is not iterable"
-msgstr ""
-
-#: py/obj.c
-msgid "'%q' object is not subscriptable"
-msgstr ""
-
#: py/emitinlinethumb.c py/emitinlinextensa.c
#, c-format
msgid "'%s' expects a label"
@@ -206,6 +166,48 @@ msgstr "'%s' integer %d tidak dalam kisaran %d..%d"
msgid "'%s' integer 0x%x does not fit in mask 0x%x"
msgstr "'%s' integer 0x%x tidak cukup didalam mask 0x%x"
+#: py/runtime.c
+msgid "'%s' object cannot assign attribute '%q'"
+msgstr "Objek '%s' tidak dapat menetapkan atribut '%q'"
+
+#: py/proto.c
+msgid "'%s' object does not support '%q'"
+msgstr "Objek '%s' tidak mendukung '%q'"
+
+#: py/obj.c
+#, c-format
+msgid "'%s' object does not support item assignment"
+msgstr "Objek '%s' tidak mendukung penetapan item"
+
+#: py/obj.c
+#, c-format
+msgid "'%s' object does not support item deletion"
+msgstr "Objek '%s' tidak mendukung penghapusan item"
+
+#: py/runtime.c
+msgid "'%s' object has no attribute '%q'"
+msgstr "Objek '%s' tidak memiliki atribut '%q'"
+
+#: py/runtime.c
+#, c-format
+msgid "'%s' object is not an iterator"
+msgstr "Objek '%s' bukan iterator"
+
+#: py/objtype.c py/runtime.c
+#, c-format
+msgid "'%s' object is not callable"
+msgstr "Objek '%s' tidak dapat dipanggil"
+
+#: py/runtime.c
+#, c-format
+msgid "'%s' object is not iterable"
+msgstr "'%s' objek tidak dapat diulang"
+
+#: py/obj.c
+#, c-format
+msgid "'%s' object is not subscriptable"
+msgstr "Objek '%s' tidak dapat disubkripsikan"
+
#: py/objstr.c
msgid "'=' alignment not allowed in string format specifier"
msgstr "'=' perataan tidak diizinkan dalam penentu format string"
@@ -880,10 +882,6 @@ msgstr "operasi I/O pada file tertutup"
msgid "I2C Init Error"
msgstr "Gagal Inisialisasi I2C"
-#: shared-bindings/audiobusio/I2SOut.c
-msgid "I2SOut not available"
-msgstr ""
-
#: shared-bindings/aesio/aes.c
#, c-format
msgid "IV must be %d bytes long"
@@ -1257,10 +1255,6 @@ msgstr "Tidak dapat menyambungkan ke AP"
msgid "Not playing"
msgstr ""
-#: main.c
-msgid "Not running saved code.\n"
-msgstr ""
-
#: shared-bindings/util.c
msgid ""
"Object has been deinitialized and can no longer be used. Create a new object."
@@ -1346,6 +1340,10 @@ msgstr "Tambahkan module apapun pada filesystem\n"
msgid "Polygon needs at least 3 points"
msgstr ""
+#: shared-bindings/ps2io/Ps2.c
+msgid "Pop from an empty Ps2 buffer"
+msgstr ""
+
#: shared-bindings/_bleio/Adapter.c
msgid "Prefix buffer must be on the heap"
msgstr ""
@@ -1421,8 +1419,13 @@ msgid "Row entry must be digitalio.DigitalInOut"
msgstr ""
#: main.c
-msgid "Running in safe mode! "
+msgid "Running in safe mode! Auto-reload is off.\n"
+msgstr "Berjalan di mode aman(safe mode)! Auto-reload tidak aktif.\n"
+
+#: main.c
+msgid "Running in safe mode! Not running saved code.\n"
msgstr ""
+"Berjalan di mode aman(safe mode)! tidak menjalankan kode yang tersimpan.\n"
#: shared-module/sdcardio/SDCard.c
msgid "SD card CSD format not supported"
@@ -1789,7 +1792,8 @@ msgid "__init__() should return None"
msgstr ""
#: py/objtype.c
-msgid "__init__() should return None, not '%q'"
+#, c-format
+msgid "__init__() should return None, not '%s'"
msgstr ""
#: py/objobject.c
@@ -1944,7 +1948,7 @@ msgstr "byte > 8 bit tidak didukung"
msgid "bytes value out of range"
msgstr ""
-#: ports/atmel-samd/bindings/samd/Clock.c ports/atmel-samd/common-hal/rtc/RTC.c
+#: ports/atmel-samd/bindings/samd/Clock.c
msgid "calibration is out of range"
msgstr "kalibrasi keluar dari jangkauan"
@@ -1976,16 +1980,47 @@ msgstr ""
msgid "can't assign to expression"
msgstr "tidak dapat menetapkan ke ekspresi"
-#: py/obj.c py/objint.c shared-bindings/i2cperipheral/I2CPeripheral.c
-msgid "can't convert %q to %q"
+#: py/obj.c
+#, c-format
+msgid "can't convert %s to complex"
+msgstr ""
+
+#: py/obj.c
+#, c-format
+msgid "can't convert %s to float"
+msgstr ""
+
+#: py/obj.c
+#, c-format
+msgid "can't convert %s to int"
msgstr ""
#: py/objstr.c
msgid "can't convert '%q' object to %q implicitly"
msgstr ""
+#: py/objint.c
+msgid "can't convert NaN to int"
+msgstr ""
+
+#: shared-bindings/i2cperipheral/I2CPeripheral.c
+msgid "can't convert address to int"
+msgstr ""
+
+#: py/objint.c
+msgid "can't convert inf to int"
+msgstr ""
+
+#: py/obj.c
+msgid "can't convert to complex"
+msgstr ""
+
#: py/obj.c
-msgid "can't convert to %q"
+msgid "can't convert to float"
+msgstr ""
+
+#: py/obj.c
+msgid "can't convert to int"
msgstr ""
#: py/objstr.c
@@ -2393,7 +2428,7 @@ msgstr "fungsi kehilangan argumen keyword '%q' yang dibutuhkan"
msgid "function missing required positional argument #%d"
msgstr "fungsi kehilangan argumen posisi #%d yang dibutuhkan"
-#: py/argcheck.c py/bc.c py/objnamedtuple.c shared-bindings/time/__init__.c
+#: py/argcheck.c py/bc.c py/objnamedtuple.c
#, c-format
msgid "function takes %d positional arguments but %d were given"
msgstr "fungsi mengambil posisi argumen %d tapi %d yang diberikan"
@@ -2442,7 +2477,10 @@ msgstr "lapisan (padding) tidak benar"
msgid "index is out of bounds"
msgstr ""
-#: py/obj.c
+#: ports/atmel-samd/common-hal/pulseio/PulseIn.c
+#: ports/cxd56/common-hal/pulseio/PulseIn.c
+#: ports/nrf/common-hal/pulseio/PulseIn.c
+#: ports/stm/common-hal/pulseio/PulseIn.c py/obj.c
msgid "index out of range"
msgstr "index keluar dari jangkauan"
@@ -2798,7 +2836,8 @@ msgid "number of points must be at least 2"
msgstr ""
#: py/obj.c
-msgid "object '%q' is not a tuple or list"
+#, c-format
+msgid "object '%s' is not a tuple or list"
msgstr ""
#: py/obj.c
@@ -2834,7 +2873,8 @@ msgid "object not iterable"
msgstr ""
#: py/obj.c
-msgid "object of type '%q' has no len()"
+#, c-format
+msgid "object of type '%s' has no len()"
msgstr ""
#: py/obj.c
@@ -2928,9 +2968,20 @@ msgstr ""
#: ports/atmel-samd/common-hal/pulseio/PulseIn.c
#: ports/cxd56/common-hal/pulseio/PulseIn.c
#: ports/nrf/common-hal/pulseio/PulseIn.c
-#: ports/stm/common-hal/pulseio/PulseIn.c py/objdict.c py/objlist.c py/objset.c
-#: shared-bindings/ps2io/Ps2.c
-msgid "pop from empty %q"
+#: ports/stm/common-hal/pulseio/PulseIn.c
+msgid "pop from an empty PulseIn"
+msgstr "Muncul dari PulseIn yang kosong"
+
+#: py/objset.c
+msgid "pop from an empty set"
+msgstr ""
+
+#: py/objlist.c
+msgid "pop from empty list"
+msgstr ""
+
+#: py/objdict.c
+msgid "popitem(): dictionary is empty"
msgstr ""
#: py/objint_mpz.c
@@ -3087,7 +3138,12 @@ msgid "stream operation not supported"
msgstr ""
#: py/objstrunicode.c
-msgid "string indices must be integers, not %q"
+msgid "string index out of range"
+msgstr ""
+
+#: py/objstrunicode.c
+#, c-format
+msgid "string indices must be integers, not %s"
msgstr ""
#: py/stream.c
@@ -3099,6 +3155,10 @@ msgid "struct: cannot index"
msgstr "struct: tidak bisa melakukan index"
#: extmod/moductypes.c
+msgid "struct: index out of range"
+msgstr "struct: index keluar dari jangkauan"
+
+#: extmod/moductypes.c
msgid "struct: no fields"
msgstr "struct: tidak ada fields"
@@ -3168,7 +3228,7 @@ msgstr ""
msgid "trapz is defined for 1D arrays of equal length"
msgstr ""
-#: extmod/ulab/code/linalg/linalg.c
+#: extmod/ulab/code/linalg/linalg.c py/objstr.c
msgid "tuple index out of range"
msgstr ""
@@ -3235,7 +3295,8 @@ msgid "unknown conversion specifier %c"
msgstr ""
#: py/objstr.c
-msgid "unknown format code '%c' for object of type '%q'"
+#, c-format
+msgid "unknown format code '%c' for object of type '%s'"
msgstr ""
#: py/compile.c
@@ -3275,7 +3336,7 @@ msgid "unsupported format character '%c' (0x%x) at index %d"
msgstr ""
#: py/runtime.c
-msgid "unsupported type for %q: '%q'"
+msgid "unsupported type for %q: '%s'"
msgstr ""
#: py/runtime.c
@@ -3283,7 +3344,7 @@ msgid "unsupported type for operator"
msgstr ""
#: py/runtime.c
-msgid "unsupported types for %q: '%q', '%q'"
+msgid "unsupported types for %q: '%s', '%s'"
msgstr ""
#: py/objint.c
@@ -3363,49 +3424,6 @@ msgstr ""
msgid "zi must be of shape (n_section, 2)"
msgstr ""
-#~ msgid "%q indices must be integers, not %s"
-#~ msgstr "indeks %q harus bilangan bulat, bukan %s"
-
-#~ msgid "'%s' object cannot assign attribute '%q'"
-#~ msgstr "Objek '%s' tidak dapat menetapkan atribut '%q'"
-
-#~ msgid "'%s' object does not support '%q'"
-#~ msgstr "Objek '%s' tidak mendukung '%q'"
-
-#~ msgid "'%s' object does not support item assignment"
-#~ msgstr "Objek '%s' tidak mendukung penetapan item"
-
-#~ msgid "'%s' object does not support item deletion"
-#~ msgstr "Objek '%s' tidak mendukung penghapusan item"
-
-#~ msgid "'%s' object has no attribute '%q'"
-#~ msgstr "Objek '%s' tidak memiliki atribut '%q'"
-
-#~ msgid "'%s' object is not an iterator"
-#~ msgstr "Objek '%s' bukan iterator"
-
-#~ msgid "'%s' object is not callable"
-#~ msgstr "Objek '%s' tidak dapat dipanggil"
-
-#~ msgid "'%s' object is not iterable"
-#~ msgstr "'%s' objek tidak dapat diulang"
-
-#~ msgid "'%s' object is not subscriptable"
-#~ msgstr "Objek '%s' tidak dapat disubkripsikan"
-
-#~ msgid "Running in safe mode! Auto-reload is off.\n"
-#~ msgstr "Berjalan di mode aman(safe mode)! Auto-reload tidak aktif.\n"
-
-#~ msgid "Running in safe mode! Not running saved code.\n"
-#~ msgstr ""
-#~ "Berjalan di mode aman(safe mode)! tidak menjalankan kode yang tersimpan.\n"
-
-#~ msgid "pop from an empty PulseIn"
-#~ msgstr "Muncul dari PulseIn yang kosong"
-
-#~ msgid "struct: index out of range"
-#~ msgstr "struct: index keluar dari jangkauan"
-
#~ msgid "'async for' or 'async with' outside async function"
#~ msgstr "'async for' atau 'async with' di luar fungsi async"
diff --git a/locale/circuitpython.pot b/locale/circuitpython.pot
index fb9869bd4..510facece 100644
--- a/locale/circuitpython.pot
+++ b/locale/circuitpython.pot
@@ -8,7 +8,7 @@ msgid ""
msgstr ""
"Project-Id-Version: PACKAGE VERSION\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2020-08-04 18:42-0500\n"
+"POT-Creation-Date: 2020-08-10 12:54-0500\n"
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
"Language-Team: LANGUAGE <LL@li.org>\n"
@@ -447,6 +447,10 @@ msgstr ""
msgid "Buffer length must be a multiple of 512"
msgstr ""
+#: ports/stm/common-hal/sdioio/SDCard.c
+msgid "Buffer must be a multiple of 512 bytes"
+msgstr ""
+
#: shared-bindings/bitbangio/I2C.c shared-bindings/busio/I2C.c
msgid "Buffer must be at least length 1"
msgstr ""
@@ -843,7 +847,7 @@ msgid "Group full"
msgstr ""
#: ports/mimxrt10xx/common-hal/busio/SPI.c ports/stm/common-hal/busio/I2C.c
-#: ports/stm/common-hal/busio/SPI.c
+#: ports/stm/common-hal/busio/SPI.c ports/stm/common-hal/sdioio/SDCard.c
msgid "Hardware busy, try alternative pins"
msgstr ""
@@ -908,6 +912,11 @@ msgstr ""
msgid "Invalid %q pin"
msgstr ""
+#: ports/stm/common-hal/busio/I2C.c ports/stm/common-hal/busio/SPI.c
+#: ports/stm/common-hal/busio/UART.c ports/stm/common-hal/sdioio/SDCard.c
+msgid "Invalid %q pin selection"
+msgstr ""
+
#: ports/stm/common-hal/analogio/AnalogIn.c
msgid "Invalid ADC Unit value"
msgstr ""
@@ -920,24 +929,12 @@ msgstr ""
msgid "Invalid DAC pin supplied"
msgstr ""
-#: ports/stm/common-hal/busio/I2C.c
-msgid "Invalid I2C pin selection"
-msgstr ""
-
#: ports/atmel-samd/common-hal/pulseio/PWMOut.c
#: ports/cxd56/common-hal/pulseio/PWMOut.c
#: ports/nrf/common-hal/pulseio/PWMOut.c shared-bindings/pulseio/PWMOut.c
msgid "Invalid PWM frequency"
msgstr ""
-#: ports/stm/common-hal/busio/SPI.c
-msgid "Invalid SPI pin selection"
-msgstr ""
-
-#: ports/stm/common-hal/busio/UART.c
-msgid "Invalid UART pin selection"
-msgstr ""
-
#: py/moduerrno.c shared-module/rgbmatrix/RGBMatrix.c
msgid "Invalid argument"
msgstr ""
@@ -1406,6 +1403,16 @@ msgstr ""
msgid "SDA or SCL needs a pull up"
msgstr ""
+#: ports/stm/common-hal/sdioio/SDCard.c
+#, c-format
+msgid "SDIO GetCardInfo Error %d"
+msgstr ""
+
+#: ports/stm/common-hal/sdioio/SDCard.c
+#, c-format
+msgid "SDIO Init Error %d"
+msgstr ""
+
#: ports/stm/common-hal/busio/SPI.c
msgid "SPI Init Error"
msgstr ""
diff --git a/locale/cs.po b/locale/cs.po
index 9af10ce95..195968e20 100644
--- a/locale/cs.po
+++ b/locale/cs.po
@@ -5,7 +5,7 @@ msgid ""
msgstr ""
"Project-Id-Version: PACKAGE VERSION\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2020-08-04 18:42-0500\n"
+"POT-Creation-Date: 2020-07-28 16:57-0500\n"
"PO-Revision-Date: 2020-05-24 03:22+0000\n"
"Last-Translator: dronecz <mzuzelka@gmail.com>\n"
"Language-Team: LANGUAGE <LL@li.org>\n"
@@ -44,11 +44,11 @@ msgstr ""
#: py/obj.c
msgid " File \"%q\""
-msgstr "  Soubor \"%q\""
+msgstr "  Soubor \"% q\""
#: py/obj.c
msgid " File \"%q\", line %d"
-msgstr "  Soubor \"%q\", řádek %d"
+msgstr "  Soubor \"% q\", řádek% d"
#: main.c
msgid " output:\n"
@@ -57,7 +57,7 @@ msgstr " výstup:\n"
#: py/objstr.c
#, c-format
msgid "%%c requires int or char"
-msgstr "%%c vyžaduje int nebo char"
+msgstr "%% c vyžaduje int nebo char"
#: shared-bindings/rgbmatrix/RGBMatrix.c
#, c-format
@@ -72,21 +72,17 @@ msgstr ""
msgid "%q in use"
msgstr "%q se nyní používá"
-#: extmod/moductypes.c ports/atmel-samd/common-hal/pulseio/PulseIn.c
-#: ports/cxd56/common-hal/pulseio/PulseIn.c
-#: ports/nrf/common-hal/pulseio/PulseIn.c
-#: ports/stm/common-hal/pulseio/PulseIn.c py/obj.c py/objstr.c
-#: py/objstrunicode.c
+#: py/obj.c
msgid "%q index out of range"
msgstr "%q index je mimo rozsah"
#: py/obj.c
-msgid "%q indices must be integers, not %q"
-msgstr ""
+msgid "%q indices must be integers, not %s"
+msgstr "Indexy% q musí být celá čísla, nikoli% s"
#: shared-bindings/vectorio/Polygon.c
msgid "%q list must be a list"
-msgstr "Seznam %q musí být seznam"
+msgstr "Seznam% q musí být seznam"
#: shared-bindings/memorymonitor/AllocationAlarm.c
msgid "%q must be >= 0"
@@ -98,11 +94,11 @@ msgstr ""
#: shared-bindings/memorymonitor/AllocationAlarm.c
#: shared-bindings/vectorio/Circle.c shared-bindings/vectorio/Rectangle.c
msgid "%q must be >= 1"
-msgstr " %q musí být > = 1"
+msgstr "% q musí být > = 1"
#: shared-module/vectorio/Polygon.c
msgid "%q must be a tuple of length 2"
-msgstr " %q musí být n-tice délky 2"
+msgstr "% q musí být n-tice délky 2"
#: ports/atmel-samd/common-hal/sdioio/SDCard.c
msgid "%q pin invalid"
@@ -110,7 +106,7 @@ msgstr ""
#: shared-bindings/fontio/BuiltinFont.c
msgid "%q should be an int"
-msgstr " %q by měl být int"
+msgstr "% q by měl být int"
#: py/bc.c py/objnamedtuple.c
msgid "%q() takes %d positional arguments but %d were given"
@@ -120,42 +116,6 @@ msgstr ""
msgid "'%q' argument required"
msgstr ""
-#: py/runtime.c
-msgid "'%q' object cannot assign attribute '%q'"
-msgstr ""
-
-#: py/proto.c
-msgid "'%q' object does not support '%q'"
-msgstr ""
-
-#: py/obj.c
-msgid "'%q' object does not support item assignment"
-msgstr ""
-
-#: py/obj.c
-msgid "'%q' object does not support item deletion"
-msgstr ""
-
-#: py/runtime.c
-msgid "'%q' object has no attribute '%q'"
-msgstr ""
-
-#: py/runtime.c
-msgid "'%q' object is not an iterator"
-msgstr ""
-
-#: py/objtype.c py/runtime.c
-msgid "'%q' object is not callable"
-msgstr ""
-
-#: py/runtime.c
-msgid "'%q' object is not iterable"
-msgstr ""
-
-#: py/obj.c
-msgid "'%q' object is not subscriptable"
-msgstr ""
-
#: py/emitinlinethumb.c py/emitinlinextensa.c
#, c-format
msgid "'%s' expects a label"
@@ -206,6 +166,48 @@ msgstr ""
msgid "'%s' integer 0x%x does not fit in mask 0x%x"
msgstr ""
+#: py/runtime.c
+msgid "'%s' object cannot assign attribute '%q'"
+msgstr ""
+
+#: py/proto.c
+msgid "'%s' object does not support '%q'"
+msgstr ""
+
+#: py/obj.c
+#, c-format
+msgid "'%s' object does not support item assignment"
+msgstr ""
+
+#: py/obj.c
+#, c-format
+msgid "'%s' object does not support item deletion"
+msgstr ""
+
+#: py/runtime.c
+msgid "'%s' object has no attribute '%q'"
+msgstr ""
+
+#: py/runtime.c
+#, c-format
+msgid "'%s' object is not an iterator"
+msgstr ""
+
+#: py/objtype.c py/runtime.c
+#, c-format
+msgid "'%s' object is not callable"
+msgstr ""
+
+#: py/runtime.c
+#, c-format
+msgid "'%s' object is not iterable"
+msgstr ""
+
+#: py/obj.c
+#, c-format
+msgid "'%s' object is not subscriptable"
+msgstr ""
+
#: py/objstr.c
msgid "'=' alignment not allowed in string format specifier"
msgstr ""
@@ -865,10 +867,6 @@ msgstr ""
msgid "I2C Init Error"
msgstr ""
-#: shared-bindings/audiobusio/I2SOut.c
-msgid "I2SOut not available"
-msgstr ""
-
#: shared-bindings/aesio/aes.c
#, c-format
msgid "IV must be %d bytes long"
@@ -1239,10 +1237,6 @@ msgstr ""
msgid "Not playing"
msgstr ""
-#: main.c
-msgid "Not running saved code.\n"
-msgstr ""
-
#: shared-bindings/util.c
msgid ""
"Object has been deinitialized and can no longer be used. Create a new object."
@@ -1328,6 +1322,10 @@ msgstr ""
msgid "Polygon needs at least 3 points"
msgstr ""
+#: shared-bindings/ps2io/Ps2.c
+msgid "Pop from an empty Ps2 buffer"
+msgstr ""
+
#: shared-bindings/_bleio/Adapter.c
msgid "Prefix buffer must be on the heap"
msgstr ""
@@ -1400,7 +1398,11 @@ msgid "Row entry must be digitalio.DigitalInOut"
msgstr ""
#: main.c
-msgid "Running in safe mode! "
+msgid "Running in safe mode! Auto-reload is off.\n"
+msgstr ""
+
+#: main.c
+msgid "Running in safe mode! Not running saved code.\n"
msgstr ""
#: shared-module/sdcardio/SDCard.c
@@ -1761,7 +1763,8 @@ msgid "__init__() should return None"
msgstr ""
#: py/objtype.c
-msgid "__init__() should return None, not '%q'"
+#, c-format
+msgid "__init__() should return None, not '%s'"
msgstr ""
#: py/objobject.c
@@ -1915,7 +1918,7 @@ msgstr ""
msgid "bytes value out of range"
msgstr ""
-#: ports/atmel-samd/bindings/samd/Clock.c ports/atmel-samd/common-hal/rtc/RTC.c
+#: ports/atmel-samd/bindings/samd/Clock.c
msgid "calibration is out of range"
msgstr ""
@@ -1947,16 +1950,47 @@ msgstr ""
msgid "can't assign to expression"
msgstr ""
-#: py/obj.c py/objint.c shared-bindings/i2cperipheral/I2CPeripheral.c
-msgid "can't convert %q to %q"
+#: py/obj.c
+#, c-format
+msgid "can't convert %s to complex"
+msgstr ""
+
+#: py/obj.c
+#, c-format
+msgid "can't convert %s to float"
+msgstr ""
+
+#: py/obj.c
+#, c-format
+msgid "can't convert %s to int"
msgstr ""
#: py/objstr.c
msgid "can't convert '%q' object to %q implicitly"
msgstr ""
+#: py/objint.c
+msgid "can't convert NaN to int"
+msgstr ""
+
+#: shared-bindings/i2cperipheral/I2CPeripheral.c
+msgid "can't convert address to int"
+msgstr ""
+
+#: py/objint.c
+msgid "can't convert inf to int"
+msgstr ""
+
+#: py/obj.c
+msgid "can't convert to complex"
+msgstr ""
+
#: py/obj.c
-msgid "can't convert to %q"
+msgid "can't convert to float"
+msgstr ""
+
+#: py/obj.c
+msgid "can't convert to int"
msgstr ""
#: py/objstr.c
@@ -2364,7 +2398,7 @@ msgstr ""
msgid "function missing required positional argument #%d"
msgstr ""
-#: py/argcheck.c py/bc.c py/objnamedtuple.c shared-bindings/time/__init__.c
+#: py/argcheck.c py/bc.c py/objnamedtuple.c
#, c-format
msgid "function takes %d positional arguments but %d were given"
msgstr ""
@@ -2413,7 +2447,10 @@ msgstr ""
msgid "index is out of bounds"
msgstr ""
-#: py/obj.c
+#: ports/atmel-samd/common-hal/pulseio/PulseIn.c
+#: ports/cxd56/common-hal/pulseio/PulseIn.c
+#: ports/nrf/common-hal/pulseio/PulseIn.c
+#: ports/stm/common-hal/pulseio/PulseIn.c py/obj.c
msgid "index out of range"
msgstr ""
@@ -2769,7 +2806,8 @@ msgid "number of points must be at least 2"
msgstr ""
#: py/obj.c
-msgid "object '%q' is not a tuple or list"
+#, c-format
+msgid "object '%s' is not a tuple or list"
msgstr ""
#: py/obj.c
@@ -2805,7 +2843,8 @@ msgid "object not iterable"
msgstr ""
#: py/obj.c
-msgid "object of type '%q' has no len()"
+#, c-format
+msgid "object of type '%s' has no len()"
msgstr ""
#: py/obj.c
@@ -2898,9 +2937,20 @@ msgstr ""
#: ports/atmel-samd/common-hal/pulseio/PulseIn.c
#: ports/cxd56/common-hal/pulseio/PulseIn.c
#: ports/nrf/common-hal/pulseio/PulseIn.c
-#: ports/stm/common-hal/pulseio/PulseIn.c py/objdict.c py/objlist.c py/objset.c
-#: shared-bindings/ps2io/Ps2.c
-msgid "pop from empty %q"
+#: ports/stm/common-hal/pulseio/PulseIn.c
+msgid "pop from an empty PulseIn"
+msgstr ""
+
+#: py/objset.c
+msgid "pop from an empty set"
+msgstr ""
+
+#: py/objlist.c
+msgid "pop from empty list"
+msgstr ""
+
+#: py/objdict.c
+msgid "popitem(): dictionary is empty"
msgstr ""
#: py/objint_mpz.c
@@ -3057,7 +3107,12 @@ msgid "stream operation not supported"
msgstr ""
#: py/objstrunicode.c
-msgid "string indices must be integers, not %q"
+msgid "string index out of range"
+msgstr ""
+
+#: py/objstrunicode.c
+#, c-format
+msgid "string indices must be integers, not %s"
msgstr ""
#: py/stream.c
@@ -3069,6 +3124,10 @@ msgid "struct: cannot index"
msgstr ""
#: extmod/moductypes.c
+msgid "struct: index out of range"
+msgstr ""
+
+#: extmod/moductypes.c
msgid "struct: no fields"
msgstr ""
@@ -3137,7 +3196,7 @@ msgstr ""
msgid "trapz is defined for 1D arrays of equal length"
msgstr ""
-#: extmod/ulab/code/linalg/linalg.c
+#: extmod/ulab/code/linalg/linalg.c py/objstr.c
msgid "tuple index out of range"
msgstr ""
@@ -3204,7 +3263,8 @@ msgid "unknown conversion specifier %c"
msgstr ""
#: py/objstr.c
-msgid "unknown format code '%c' for object of type '%q'"
+#, c-format
+msgid "unknown format code '%c' for object of type '%s'"
msgstr ""
#: py/compile.c
@@ -3244,7 +3304,7 @@ msgid "unsupported format character '%c' (0x%x) at index %d"
msgstr ""
#: py/runtime.c
-msgid "unsupported type for %q: '%q'"
+msgid "unsupported type for %q: '%s'"
msgstr ""
#: py/runtime.c
@@ -3252,7 +3312,7 @@ msgid "unsupported type for operator"
msgstr ""
#: py/runtime.c
-msgid "unsupported types for %q: '%q', '%q'"
+msgid "unsupported types for %q: '%s', '%s'"
msgstr ""
#: py/objint.c
@@ -3331,6 +3391,3 @@ msgstr ""
#: extmod/ulab/code/filter/filter.c
msgid "zi must be of shape (n_section, 2)"
msgstr ""
-
-#~ msgid "%q indices must be integers, not %s"
-#~ msgstr "Indexy %q musí být celá čísla, nikoli %s"
diff --git a/locale/de_DE.po b/locale/de_DE.po
index 9472d3f0f..8ba5e4bd3 100644
--- a/locale/de_DE.po
+++ b/locale/de_DE.po
@@ -5,7 +5,7 @@ msgid ""
msgstr ""
"Project-Id-Version: \n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2020-08-04 18:42-0500\n"
+"POT-Creation-Date: 2020-07-28 16:57-0500\n"
"PO-Revision-Date: 2020-06-16 18:24+0000\n"
"Last-Translator: Andreas Buchen <andreas.buchen@gmail.com>\n"
"Language: de_DE\n"
@@ -71,17 +71,13 @@ msgstr ""
msgid "%q in use"
msgstr "%q in Benutzung"
-#: extmod/moductypes.c ports/atmel-samd/common-hal/pulseio/PulseIn.c
-#: ports/cxd56/common-hal/pulseio/PulseIn.c
-#: ports/nrf/common-hal/pulseio/PulseIn.c
-#: ports/stm/common-hal/pulseio/PulseIn.c py/obj.c py/objstr.c
-#: py/objstrunicode.c
+#: py/obj.c
msgid "%q index out of range"
msgstr "Der Index %q befindet sich außerhalb des Bereiches"
#: py/obj.c
-msgid "%q indices must be integers, not %q"
-msgstr ""
+msgid "%q indices must be integers, not %s"
+msgstr "%q Indizes müssen Integer sein, nicht %s"
#: shared-bindings/vectorio/Polygon.c
msgid "%q list must be a list"
@@ -119,42 +115,6 @@ msgstr "%q() nimmt %d Argumente ohne Keyword an, aber es wurden %d angegeben"
msgid "'%q' argument required"
msgstr "'%q' Argument erforderlich"
-#: py/runtime.c
-msgid "'%q' object cannot assign attribute '%q'"
-msgstr ""
-
-#: py/proto.c
-msgid "'%q' object does not support '%q'"
-msgstr ""
-
-#: py/obj.c
-msgid "'%q' object does not support item assignment"
-msgstr ""
-
-#: py/obj.c
-msgid "'%q' object does not support item deletion"
-msgstr ""
-
-#: py/runtime.c
-msgid "'%q' object has no attribute '%q'"
-msgstr ""
-
-#: py/runtime.c
-msgid "'%q' object is not an iterator"
-msgstr ""
-
-#: py/objtype.c py/runtime.c
-msgid "'%q' object is not callable"
-msgstr ""
-
-#: py/runtime.c
-msgid "'%q' object is not iterable"
-msgstr ""
-
-#: py/obj.c
-msgid "'%q' object is not subscriptable"
-msgstr ""
-
#: py/emitinlinethumb.c py/emitinlinextensa.c
#, c-format
msgid "'%s' expects a label"
@@ -205,6 +165,48 @@ msgstr "'%s' integer %d ist nicht im Bereich %d..%d"
msgid "'%s' integer 0x%x does not fit in mask 0x%x"
msgstr "'%s' Integer 0x%x passt nicht in Maske 0x%x"
+#: py/runtime.c
+msgid "'%s' object cannot assign attribute '%q'"
+msgstr "Das Objekt '%s' kann das Attribut '%q' nicht zuweisen"
+
+#: py/proto.c
+msgid "'%s' object does not support '%q'"
+msgstr "Das Objekt '%s' unterstützt '%q' nicht"
+
+#: py/obj.c
+#, c-format
+msgid "'%s' object does not support item assignment"
+msgstr "'%s' Objekt unterstützt keine Zuweisung von Elementen"
+
+#: py/obj.c
+#, c-format
+msgid "'%s' object does not support item deletion"
+msgstr "'%s' Objekt unterstützt das Löschen von Elementen nicht"
+
+#: py/runtime.c
+msgid "'%s' object has no attribute '%q'"
+msgstr "'%s' Objekt hat kein Attribut '%q'"
+
+#: py/runtime.c
+#, c-format
+msgid "'%s' object is not an iterator"
+msgstr "'%s' Objekt ist kein Iterator"
+
+#: py/objtype.c py/runtime.c
+#, c-format
+msgid "'%s' object is not callable"
+msgstr "'%s' object ist nicht aufrufbar"
+
+#: py/runtime.c
+#, c-format
+msgid "'%s' object is not iterable"
+msgstr "'%s' Objekt nicht iterierbar"
+
+#: py/obj.c
+#, c-format
+msgid "'%s' object is not subscriptable"
+msgstr "'%s' Objekt hat keine '__getitem__'-Methode (not subscriptable)"
+
#: py/objstr.c
msgid "'=' alignment not allowed in string format specifier"
msgstr "'='-Ausrichtung ist im String-Formatbezeichner nicht zulässig"
@@ -880,10 +882,6 @@ msgstr "Lese/Schreibe-operation an geschlossener Datei"
msgid "I2C Init Error"
msgstr "I2C-Init-Fehler"
-#: shared-bindings/audiobusio/I2SOut.c
-msgid "I2SOut not available"
-msgstr ""
-
#: shared-bindings/aesio/aes.c
#, c-format
msgid "IV must be %d bytes long"
@@ -1258,10 +1256,6 @@ msgstr "Nicht verbunden"
msgid "Not playing"
msgstr "Spielt nicht ab"
-#: main.c
-msgid "Not running saved code.\n"
-msgstr ""
-
#: shared-bindings/util.c
msgid ""
"Object has been deinitialized and can no longer be used. Create a new object."
@@ -1356,6 +1350,10 @@ msgstr "und alle Module im Dateisystem \n"
msgid "Polygon needs at least 3 points"
msgstr "Polygone brauchen mindestens 3 Punkte"
+#: shared-bindings/ps2io/Ps2.c
+msgid "Pop from an empty Ps2 buffer"
+msgstr "Pop aus einem leeren Ps2-Puffer"
+
#: shared-bindings/_bleio/Adapter.c
msgid "Prefix buffer must be on the heap"
msgstr "Der Präfixbuffer muss sich auf dem Heap befinden"
@@ -1430,8 +1428,12 @@ msgid "Row entry must be digitalio.DigitalInOut"
msgstr "Zeileneintrag muss ein digitalio.DigitalInOut sein"
#: main.c
-msgid "Running in safe mode! "
-msgstr ""
+msgid "Running in safe mode! Auto-reload is off.\n"
+msgstr "Sicherheitsmodus aktiv! Automatisches Neuladen ist deaktiviert.\n"
+
+#: main.c
+msgid "Running in safe mode! Not running saved code.\n"
+msgstr "Sicherheitsmodus aktiv! Gespeicherter Code wird nicht ausgeführt\n"
#: shared-module/sdcardio/SDCard.c
msgid "SD card CSD format not supported"
@@ -1818,8 +1820,9 @@ msgid "__init__() should return None"
msgstr "__init__() sollte None zurückgeben"
#: py/objtype.c
-msgid "__init__() should return None, not '%q'"
-msgstr ""
+#, c-format
+msgid "__init__() should return None, not '%s'"
+msgstr "__init__() sollte None zurückgeben, nicht '%s'"
#: py/objobject.c
msgid "__new__ arg must be a user-type"
@@ -1972,7 +1975,7 @@ msgstr "bytes mit mehr als 8 bits werden nicht unterstützt"
msgid "bytes value out of range"
msgstr "Byte-Wert außerhalb des Bereichs"
-#: ports/atmel-samd/bindings/samd/Clock.c ports/atmel-samd/common-hal/rtc/RTC.c
+#: ports/atmel-samd/bindings/samd/Clock.c
msgid "calibration is out of range"
msgstr "Kalibrierung ist außerhalb der Reichweite"
@@ -2006,17 +2009,48 @@ msgstr ""
msgid "can't assign to expression"
msgstr "kann keinem Ausdruck zuweisen"
-#: py/obj.c py/objint.c shared-bindings/i2cperipheral/I2CPeripheral.c
-msgid "can't convert %q to %q"
-msgstr ""
+#: py/obj.c
+#, c-format
+msgid "can't convert %s to complex"
+msgstr "kann %s nicht nach complex konvertieren"
+
+#: py/obj.c
+#, c-format
+msgid "can't convert %s to float"
+msgstr "kann %s nicht nach float konvertieren"
+
+#: py/obj.c
+#, c-format
+msgid "can't convert %s to int"
+msgstr "kann %s nicht nach int konvertieren"
#: py/objstr.c
msgid "can't convert '%q' object to %q implicitly"
msgstr "Kann '%q' Objekt nicht implizit nach %q konvertieren"
+#: py/objint.c
+msgid "can't convert NaN to int"
+msgstr "kann NaN nicht nach int konvertieren"
+
+#: shared-bindings/i2cperipheral/I2CPeripheral.c
+msgid "can't convert address to int"
+msgstr "kann Adresse nicht in int konvertieren"
+
+#: py/objint.c
+msgid "can't convert inf to int"
+msgstr "kann inf nicht nach int konvertieren"
+
#: py/obj.c
-msgid "can't convert to %q"
-msgstr ""
+msgid "can't convert to complex"
+msgstr "kann nicht nach complex konvertieren"
+
+#: py/obj.c
+msgid "can't convert to float"
+msgstr "kann nicht nach float konvertieren"
+
+#: py/obj.c
+msgid "can't convert to int"
+msgstr "kann nicht nach int konvertieren"
#: py/objstr.c
msgid "can't convert to str implicitly"
@@ -2434,7 +2468,7 @@ msgstr "Funktion vermisst benötigtes Keyword-Argumente '%q'"
msgid "function missing required positional argument #%d"
msgstr "Funktion vermisst benötigtes Argumente ohne Keyword #%d"
-#: py/argcheck.c py/bc.c py/objnamedtuple.c shared-bindings/time/__init__.c
+#: py/argcheck.c py/bc.c py/objnamedtuple.c
#, c-format
msgid "function takes %d positional arguments but %d were given"
msgstr ""
@@ -2484,7 +2518,10 @@ msgstr "padding ist inkorrekt"
msgid "index is out of bounds"
msgstr "Index ist außerhalb der Grenzen"
-#: py/obj.c
+#: ports/atmel-samd/common-hal/pulseio/PulseIn.c
+#: ports/cxd56/common-hal/pulseio/PulseIn.c
+#: ports/nrf/common-hal/pulseio/PulseIn.c
+#: ports/stm/common-hal/pulseio/PulseIn.c py/obj.c
msgid "index out of range"
msgstr "index außerhalb der Reichweite"
@@ -2847,8 +2884,9 @@ msgid "number of points must be at least 2"
msgstr "Die Anzahl der Punkte muss mindestens 2 betragen"
#: py/obj.c
-msgid "object '%q' is not a tuple or list"
-msgstr ""
+#, c-format
+msgid "object '%s' is not a tuple or list"
+msgstr "Objekt '%s' ist weder tupel noch list"
#: py/obj.c
msgid "object does not support item assignment"
@@ -2883,8 +2921,9 @@ msgid "object not iterable"
msgstr "Objekt nicht iterierbar"
#: py/obj.c
-msgid "object of type '%q' has no len()"
-msgstr ""
+#, c-format
+msgid "object of type '%s' has no len()"
+msgstr "Objekt vom Typ '%s' hat keine len()"
#: py/obj.c
msgid "object with buffer protocol required"
@@ -2979,10 +3018,21 @@ msgstr "Polygon kann nur in einem übergeordneten Element registriert werden"
#: ports/atmel-samd/common-hal/pulseio/PulseIn.c
#: ports/cxd56/common-hal/pulseio/PulseIn.c
#: ports/nrf/common-hal/pulseio/PulseIn.c
-#: ports/stm/common-hal/pulseio/PulseIn.c py/objdict.c py/objlist.c py/objset.c
-#: shared-bindings/ps2io/Ps2.c
-msgid "pop from empty %q"
-msgstr ""
+#: ports/stm/common-hal/pulseio/PulseIn.c
+msgid "pop from an empty PulseIn"
+msgstr "pop von einem leeren PulseIn"
+
+#: py/objset.c
+msgid "pop from an empty set"
+msgstr "pop von einer leeren Menge (set)"
+
+#: py/objlist.c
+msgid "pop from empty list"
+msgstr "pop von einer leeren Liste"
+
+#: py/objdict.c
+msgid "popitem(): dictionary is empty"
+msgstr "popitem(): dictionary ist leer"
#: py/objint_mpz.c
msgid "pow() 3rd argument cannot be 0"
@@ -3140,8 +3190,13 @@ msgid "stream operation not supported"
msgstr "stream operation ist nicht unterstützt"
#: py/objstrunicode.c
-msgid "string indices must be integers, not %q"
-msgstr ""
+msgid "string index out of range"
+msgstr "String index außerhalb des Bereiches"
+
+#: py/objstrunicode.c
+#, c-format
+msgid "string indices must be integers, not %s"
+msgstr "String indizes müssen Integer sein, nicht %s"
#: py/stream.c
msgid "string not supported; use bytes or bytearray"
@@ -3153,6 +3208,10 @@ msgid "struct: cannot index"
msgstr "struct: kann nicht indexieren"
#: extmod/moductypes.c
+msgid "struct: index out of range"
+msgstr "struct: index außerhalb gültigen Bereichs"
+
+#: extmod/moductypes.c
msgid "struct: no fields"
msgstr "struct: keine Felder"
@@ -3221,7 +3280,7 @@ msgstr "zu viele Werte zum Auspacken (erwartet %d)"
msgid "trapz is defined for 1D arrays of equal length"
msgstr ""
-#: extmod/ulab/code/linalg/linalg.c
+#: extmod/ulab/code/linalg/linalg.c py/objstr.c
msgid "tuple index out of range"
msgstr "Tupelindex außerhalb des Bereichs"
@@ -3292,8 +3351,9 @@ msgid "unknown conversion specifier %c"
msgstr "unbekannter Konvertierungs specifier %c"
#: py/objstr.c
-msgid "unknown format code '%c' for object of type '%q'"
-msgstr ""
+#, c-format
+msgid "unknown format code '%c' for object of type '%s'"
+msgstr "unbekannter Formatcode '%c' für Objekt vom Typ '%s'"
#: py/compile.c
msgid "unknown type"
@@ -3332,16 +3392,16 @@ msgid "unsupported format character '%c' (0x%x) at index %d"
msgstr "nicht unterstütztes Formatzeichen '%c' (0x%x) bei Index %d"
#: py/runtime.c
-msgid "unsupported type for %q: '%q'"
-msgstr ""
+msgid "unsupported type for %q: '%s'"
+msgstr "nicht unterstützter Type für %q: '%s'"
#: py/runtime.c
msgid "unsupported type for operator"
msgstr "nicht unterstützter Typ für Operator"
#: py/runtime.c
-msgid "unsupported types for %q: '%q', '%q'"
-msgstr ""
+msgid "unsupported types for %q: '%s', '%s'"
+msgstr "nicht unterstützte Typen für %q: '%s', '%s'"
#: py/objint.c
#, c-format
@@ -3420,120 +3480,15 @@ msgstr ""
msgid "zi must be of shape (n_section, 2)"
msgstr ""
-#~ msgid "%q indices must be integers, not %s"
-#~ msgstr "%q Indizes müssen Integer sein, nicht %s"
-
-#~ msgid "'%s' object cannot assign attribute '%q'"
-#~ msgstr "Das Objekt '%s' kann das Attribut '%q' nicht zuweisen"
-
-#~ msgid "'%s' object does not support '%q'"
-#~ msgstr "Das Objekt '%s' unterstützt '%q' nicht"
-
-#~ msgid "'%s' object does not support item assignment"
-#~ msgstr "'%s' Objekt unterstützt keine Zuweisung von Elementen"
-
-#~ msgid "'%s' object does not support item deletion"
-#~ msgstr "'%s' Objekt unterstützt das Löschen von Elementen nicht"
-
-#~ msgid "'%s' object has no attribute '%q'"
-#~ msgstr "'%s' Objekt hat kein Attribut '%q'"
-
-#~ msgid "'%s' object is not an iterator"
-#~ msgstr "'%s' Objekt ist kein Iterator"
-
-#~ msgid "'%s' object is not callable"
-#~ msgstr "'%s' object ist nicht aufrufbar"
-
-#~ msgid "'%s' object is not iterable"
-#~ msgstr "'%s' Objekt nicht iterierbar"
-
-#~ msgid "'%s' object is not subscriptable"
-#~ msgstr "'%s' Objekt hat keine '__getitem__'-Methode (not subscriptable)"
-
-#~ msgid "Pop from an empty Ps2 buffer"
-#~ msgstr "Pop aus einem leeren Ps2-Puffer"
-
-#~ msgid "Running in safe mode! Auto-reload is off.\n"
-#~ msgstr "Sicherheitsmodus aktiv! Automatisches Neuladen ist deaktiviert.\n"
-
-#~ msgid "Running in safe mode! Not running saved code.\n"
-#~ msgstr "Sicherheitsmodus aktiv! Gespeicherter Code wird nicht ausgeführt\n"
-
-#~ msgid "__init__() should return None, not '%s'"
-#~ msgstr "__init__() sollte None zurückgeben, nicht '%s'"
-
-#~ msgid "can't convert %s to complex"
-#~ msgstr "kann %s nicht nach complex konvertieren"
-
-#~ msgid "can't convert %s to float"
-#~ msgstr "kann %s nicht nach float konvertieren"
-
-#~ msgid "can't convert %s to int"
-#~ msgstr "kann %s nicht nach int konvertieren"
-
-#~ msgid "can't convert NaN to int"
-#~ msgstr "kann NaN nicht nach int konvertieren"
-
-#~ msgid "can't convert address to int"
-#~ msgstr "kann Adresse nicht in int konvertieren"
-
-#~ msgid "can't convert inf to int"
-#~ msgstr "kann inf nicht nach int konvertieren"
-
-#~ msgid "can't convert to complex"
-#~ msgstr "kann nicht nach complex konvertieren"
-
-#~ msgid "can't convert to float"
-#~ msgstr "kann nicht nach float konvertieren"
-
-#~ msgid "can't convert to int"
-#~ msgstr "kann nicht nach int konvertieren"
-
-#~ msgid "object '%s' is not a tuple or list"
-#~ msgstr "Objekt '%s' ist weder tupel noch list"
-
-#~ msgid "object of type '%s' has no len()"
-#~ msgstr "Objekt vom Typ '%s' hat keine len()"
-
-#~ msgid "pop from an empty PulseIn"
-#~ msgstr "pop von einem leeren PulseIn"
-
-#~ msgid "pop from an empty set"
-#~ msgstr "pop von einer leeren Menge (set)"
-
-#~ msgid "pop from empty list"
-#~ msgstr "pop von einer leeren Liste"
-
-#~ msgid "popitem(): dictionary is empty"
-#~ msgstr "popitem(): dictionary ist leer"
-
-#~ msgid "string index out of range"
-#~ msgstr "String index außerhalb des Bereiches"
-
-#~ msgid "string indices must be integers, not %s"
-#~ msgstr "String indizes müssen Integer sein, nicht %s"
-
-#~ msgid "struct: index out of range"
-#~ msgstr "struct: index außerhalb gültigen Bereichs"
-
-#~ msgid "unknown format code '%c' for object of type '%s'"
-#~ msgstr "unbekannter Formatcode '%c' für Objekt vom Typ '%s'"
-
-#~ msgid "unsupported type for %q: '%s'"
-#~ msgstr "nicht unterstützter Type für %q: '%s'"
-
-#~ msgid "unsupported types for %q: '%s', '%s'"
-#~ msgstr "nicht unterstützte Typen für %q: '%s', '%s'"
-
#~ msgid "'async for' or 'async with' outside async function"
#~ msgstr "'async for' oder 'async with' außerhalb der asynchronen Funktion"
-#~ msgid "PulseIn not supported on this chip"
-#~ msgstr "PulseIn wird auf diesem Chip nicht unterstützt"
-
#~ msgid "PulseOut not supported on this chip"
#~ msgstr "PulseOut wird auf diesem Chip nicht unterstützt"
+#~ msgid "PulseIn not supported on this chip"
+#~ msgstr "PulseIn wird auf diesem Chip nicht unterstützt"
+
#~ msgid "AP required"
#~ msgstr "AP erforderlich"
diff --git a/locale/es.po b/locale/es.po
index 23aa0c932..1294473af 100644
--- a/locale/es.po
+++ b/locale/es.po
@@ -7,8 +7,8 @@ msgid ""
msgstr ""
"Project-Id-Version: \n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2020-08-04 18:42-0500\n"
-"PO-Revision-Date: 2020-08-07 15:06+0000\n"
+"POT-Creation-Date: 2020-07-28 16:57-0500\n"
+"PO-Revision-Date: 2020-07-24 21:12+0000\n"
"Last-Translator: Alvaro Figueroa <alvaro@greencore.co.cr>\n"
"Language-Team: \n"
"Language: es\n"
@@ -75,17 +75,13 @@ msgstr "%q fallo: %d"
msgid "%q in use"
msgstr "%q está siendo utilizado"
-#: extmod/moductypes.c ports/atmel-samd/common-hal/pulseio/PulseIn.c
-#: ports/cxd56/common-hal/pulseio/PulseIn.c
-#: ports/nrf/common-hal/pulseio/PulseIn.c
-#: ports/stm/common-hal/pulseio/PulseIn.c py/obj.c py/objstr.c
-#: py/objstrunicode.c
+#: py/obj.c
msgid "%q index out of range"
msgstr "%q indice fuera de rango"
#: py/obj.c
-msgid "%q indices must be integers, not %q"
-msgstr ""
+msgid "%q indices must be integers, not %s"
+msgstr "%q indices deben ser enteros, no %s"
#: shared-bindings/vectorio/Polygon.c
msgid "%q list must be a list"
@@ -123,42 +119,6 @@ msgstr "%q() toma %d argumentos posicionales pero %d fueron dados"
msgid "'%q' argument required"
msgstr "argumento '%q' requerido"
-#: py/runtime.c
-msgid "'%q' object cannot assign attribute '%q'"
-msgstr ""
-
-#: py/proto.c
-msgid "'%q' object does not support '%q'"
-msgstr ""
-
-#: py/obj.c
-msgid "'%q' object does not support item assignment"
-msgstr ""
-
-#: py/obj.c
-msgid "'%q' object does not support item deletion"
-msgstr ""
-
-#: py/runtime.c
-msgid "'%q' object has no attribute '%q'"
-msgstr ""
-
-#: py/runtime.c
-msgid "'%q' object is not an iterator"
-msgstr ""
-
-#: py/objtype.c py/runtime.c
-msgid "'%q' object is not callable"
-msgstr ""
-
-#: py/runtime.c
-msgid "'%q' object is not iterable"
-msgstr ""
-
-#: py/obj.c
-msgid "'%q' object is not subscriptable"
-msgstr ""
-
#: py/emitinlinethumb.c py/emitinlinextensa.c
#, c-format
msgid "'%s' expects a label"
@@ -209,6 +169,48 @@ msgstr "'%s' entero %d no esta dentro del rango %d..%d"
msgid "'%s' integer 0x%x does not fit in mask 0x%x"
msgstr "'%s' entero 0x%x no cabe en la máscara 0x%x"
+#: py/runtime.c
+msgid "'%s' object cannot assign attribute '%q'"
+msgstr "El objeto '%s' no puede asignar al atributo '%q'"
+
+#: py/proto.c
+msgid "'%s' object does not support '%q'"
+msgstr "El objeto '%s' no admite '%q'"
+
+#: py/obj.c
+#, c-format
+msgid "'%s' object does not support item assignment"
+msgstr "el objeto '%s' no soporta la asignación de elementos"
+
+#: py/obj.c
+#, c-format
+msgid "'%s' object does not support item deletion"
+msgstr "objeto '%s' no soporta la eliminación de elementos"
+
+#: py/runtime.c
+msgid "'%s' object has no attribute '%q'"
+msgstr "objeto '%s' no tiene atributo '%q'"
+
+#: py/runtime.c
+#, c-format
+msgid "'%s' object is not an iterator"
+msgstr "objeto '%s' no es un iterator"
+
+#: py/objtype.c py/runtime.c
+#, c-format
+msgid "'%s' object is not callable"
+msgstr "objeto '%s' no puede ser llamado"
+
+#: py/runtime.c
+#, c-format
+msgid "'%s' object is not iterable"
+msgstr "objeto '%s' no es iterable"
+
+#: py/obj.c
+#, c-format
+msgid "'%s' object is not subscriptable"
+msgstr "el objeto '%s' no es suscriptable"
+
#: py/objstr.c
msgid "'=' alignment not allowed in string format specifier"
msgstr "'=' alineación no permitida en el especificador string format"
@@ -227,7 +229,7 @@ msgstr "'await' fuera de la función"
#: py/compile.c
msgid "'await', 'async for' or 'async with' outside async function"
-msgstr "'await', 'async for' o 'async with' fuera de la función async"
+msgstr ""
#: py/compile.c
msgid "'break' outside loop"
@@ -336,7 +338,7 @@ msgstr "Ya se encuentra publicando."
#: shared-module/memorymonitor/AllocationAlarm.c
#: shared-module/memorymonitor/AllocationSize.c
msgid "Already running"
-msgstr "Ya está ejecutando"
+msgstr "Ya está en ejecución"
#: ports/cxd56/common-hal/analogio/AnalogIn.c
msgid "AnalogIn not supported on given pin"
@@ -376,7 +378,7 @@ msgstr "Como máximo %d %q se puede especificar (no %d)"
#: shared-module/memorymonitor/AllocationAlarm.c
#, c-format
msgid "Attempt to allocate %d blocks"
-msgstr "Tratando de soliciar %d bloques"
+msgstr "Tratando de localizar %d bloques"
#: supervisor/shared/safe_mode.c
msgid "Attempted heap allocation when MicroPython VM not running."
@@ -881,10 +883,6 @@ msgstr "Operación I/O en archivo cerrado"
msgid "I2C Init Error"
msgstr "Error de inicio de I2C"
-#: shared-bindings/audiobusio/I2SOut.c
-msgid "I2SOut not available"
-msgstr "I2SOut no disponible"
-
#: shared-bindings/aesio/aes.c
#, c-format
msgid "IV must be %d bytes long"
@@ -1257,10 +1255,6 @@ msgstr "No conectado"
msgid "Not playing"
msgstr "No reproduciendo"
-#: main.c
-msgid "Not running saved code.\n"
-msgstr ""
-
#: shared-bindings/util.c
msgid ""
"Object has been deinitialized and can no longer be used. Create a new object."
@@ -1356,6 +1350,10 @@ msgstr "Además de cualquier módulo en el sistema de archivos\n"
msgid "Polygon needs at least 3 points"
msgstr "El polígono necesita al menos 3 puntos"
+#: shared-bindings/ps2io/Ps2.c
+msgid "Pop from an empty Ps2 buffer"
+msgstr "Pop de un buffer Ps2 vacio"
+
#: shared-bindings/_bleio/Adapter.c
msgid "Prefix buffer must be on the heap"
msgstr "El búfer de prefijo debe estar en el montículo"
@@ -1429,8 +1427,12 @@ msgid "Row entry must be digitalio.DigitalInOut"
msgstr "La entrada de la fila debe ser digitalio.DigitalInOut"
#: main.c
-msgid "Running in safe mode! "
-msgstr ""
+msgid "Running in safe mode! Auto-reload is off.\n"
+msgstr "Ejecutando en modo seguro! La auto-recarga esta deshabilitada.\n"
+
+#: main.c
+msgid "Running in safe mode! Not running saved code.\n"
+msgstr "Ejecutando en modo seguro! No se esta ejecutando el código guardado.\n"
#: shared-module/sdcardio/SDCard.c
msgid "SD card CSD format not supported"
@@ -1585,8 +1587,8 @@ msgstr ""
msgid ""
"Timer was reserved for internal use - declare PWM pins earlier in the program"
msgstr ""
-"Temporizador declarado para uso interno - declare los pines de PWM más "
-"temprano en el programa"
+"El temporizador es utilizado para uso interno - declare los pines para PWM "
+"más temprano en el programa"
#: ports/atmel-samd/common-hal/audiobusio/I2SOut.c
msgid "Too many channels in sample."
@@ -1815,8 +1817,9 @@ msgid "__init__() should return None"
msgstr "__init__() deberia devolver None"
#: py/objtype.c
-msgid "__init__() should return None, not '%q'"
-msgstr ""
+#, c-format
+msgid "__init__() should return None, not '%s'"
+msgstr "__init__() deberia devolver None, no '%s'"
#: py/objobject.c
msgid "__new__ arg must be a user-type"
@@ -1861,7 +1864,7 @@ msgstr "el argumento tiene un tipo erroneo"
#: extmod/ulab/code/linalg/linalg.c
msgid "argument must be ndarray"
-msgstr "el argumento debe ser ndarray"
+msgstr ""
#: py/argcheck.c shared-bindings/_stage/__init__.c
#: shared-bindings/digitalio/DigitalInOut.c shared-bindings/gamepad/GamePad.c
@@ -1969,7 +1972,7 @@ msgstr "bytes > 8 bits no soportados"
msgid "bytes value out of range"
msgstr "valor de bytes fuera de rango"
-#: ports/atmel-samd/bindings/samd/Clock.c ports/atmel-samd/common-hal/rtc/RTC.c
+#: ports/atmel-samd/bindings/samd/Clock.c
msgid "calibration is out of range"
msgstr "calibration esta fuera de rango"
@@ -2001,17 +2004,48 @@ msgstr "no se puede agregar un método a una clase ya subclasificada"
msgid "can't assign to expression"
msgstr "no se puede asignar a la expresión"
-#: py/obj.c py/objint.c shared-bindings/i2cperipheral/I2CPeripheral.c
-msgid "can't convert %q to %q"
-msgstr ""
+#: py/obj.c
+#, c-format
+msgid "can't convert %s to complex"
+msgstr "no se puede convertir %s a complejo"
+
+#: py/obj.c
+#, c-format
+msgid "can't convert %s to float"
+msgstr "no se puede convertir %s a float"
+
+#: py/obj.c
+#, c-format
+msgid "can't convert %s to int"
+msgstr "no se puede convertir %s a int"
#: py/objstr.c
msgid "can't convert '%q' object to %q implicitly"
msgstr "no se puede convertir el objeto '%q' a %q implícitamente"
+#: py/objint.c
+msgid "can't convert NaN to int"
+msgstr "no se puede convertir Nan a int"
+
+#: shared-bindings/i2cperipheral/I2CPeripheral.c
+msgid "can't convert address to int"
+msgstr "no se puede convertir address a int"
+
+#: py/objint.c
+msgid "can't convert inf to int"
+msgstr "no se puede convertir inf en int"
+
#: py/obj.c
-msgid "can't convert to %q"
-msgstr ""
+msgid "can't convert to complex"
+msgstr "no se puede convertir a complejo"
+
+#: py/obj.c
+msgid "can't convert to float"
+msgstr "no se puede convertir a float"
+
+#: py/obj.c
+msgid "can't convert to int"
+msgstr "no se puede convertir a int"
#: py/objstr.c
msgid "can't convert to str implicitly"
@@ -2425,7 +2459,7 @@ msgstr "la función requiere del argumento por palabra clave '%q'"
msgid "function missing required positional argument #%d"
msgstr "la función requiere del argumento posicional #%d"
-#: py/argcheck.c py/bc.c py/objnamedtuple.c shared-bindings/time/__init__.c
+#: py/argcheck.c py/bc.c py/objnamedtuple.c
#, c-format
msgid "function takes %d positional arguments but %d were given"
msgstr "la función toma %d argumentos posicionales pero le fueron dados %d"
@@ -2474,7 +2508,10 @@ msgstr "relleno (padding) incorrecto"
msgid "index is out of bounds"
msgstr "el índice está fuera de límites"
-#: py/obj.c
+#: ports/atmel-samd/common-hal/pulseio/PulseIn.c
+#: ports/cxd56/common-hal/pulseio/PulseIn.c
+#: ports/nrf/common-hal/pulseio/PulseIn.c
+#: ports/stm/common-hal/pulseio/PulseIn.c py/obj.c
msgid "index out of range"
msgstr "index fuera de rango"
@@ -2836,8 +2873,9 @@ msgid "number of points must be at least 2"
msgstr "el número de puntos debe ser al menos 2"
#: py/obj.c
-msgid "object '%q' is not a tuple or list"
-msgstr ""
+#, c-format
+msgid "object '%s' is not a tuple or list"
+msgstr "el objeto '%s' no es una tupla o lista"
#: py/obj.c
msgid "object does not support item assignment"
@@ -2872,8 +2910,9 @@ msgid "object not iterable"
msgstr "objeto no iterable"
#: py/obj.c
-msgid "object of type '%q' has no len()"
-msgstr ""
+#, c-format
+msgid "object of type '%s' has no len()"
+msgstr "el objeto de tipo '%s' no tiene len()"
#: py/obj.c
msgid "object with buffer protocol required"
@@ -2965,10 +3004,21 @@ msgstr "el polígono solo se puede registrar en uno de los padres"
#: ports/atmel-samd/common-hal/pulseio/PulseIn.c
#: ports/cxd56/common-hal/pulseio/PulseIn.c
#: ports/nrf/common-hal/pulseio/PulseIn.c
-#: ports/stm/common-hal/pulseio/PulseIn.c py/objdict.c py/objlist.c py/objset.c
-#: shared-bindings/ps2io/Ps2.c
-msgid "pop from empty %q"
-msgstr ""
+#: ports/stm/common-hal/pulseio/PulseIn.c
+msgid "pop from an empty PulseIn"
+msgstr "pop de un PulseIn vacío"
+
+#: py/objset.c
+msgid "pop from an empty set"
+msgstr "pop desde un set vacío"
+
+#: py/objlist.c
+msgid "pop from empty list"
+msgstr "pop desde una lista vacía"
+
+#: py/objdict.c
+msgid "popitem(): dictionary is empty"
+msgstr "popitem(): diccionario vacío"
#: py/objint_mpz.c
msgid "pow() 3rd argument cannot be 0"
@@ -3126,8 +3176,13 @@ msgid "stream operation not supported"
msgstr "operación stream no soportada"
#: py/objstrunicode.c
-msgid "string indices must be integers, not %q"
-msgstr ""
+msgid "string index out of range"
+msgstr "string index fuera de rango"
+
+#: py/objstrunicode.c
+#, c-format
+msgid "string indices must be integers, not %s"
+msgstr "índices de string deben ser enteros, no %s"
#: py/stream.c
msgid "string not supported; use bytes or bytearray"
@@ -3138,6 +3193,10 @@ msgid "struct: cannot index"
msgstr "struct: no se puede indexar"
#: extmod/moductypes.c
+msgid "struct: index out of range"
+msgstr "struct: index fuera de rango"
+
+#: extmod/moductypes.c
msgid "struct: no fields"
msgstr "struct: sin campos"
@@ -3205,9 +3264,9 @@ msgstr "demasiados valores para descomprimir (%d esperado)"
#: extmod/ulab/code/approx/approx.c
msgid "trapz is defined for 1D arrays of equal length"
-msgstr "trapz está definido para arreglos 1D de tamaño igual"
+msgstr ""
-#: extmod/ulab/code/linalg/linalg.c
+#: extmod/ulab/code/linalg/linalg.c py/objstr.c
msgid "tuple index out of range"
msgstr "tuple index fuera de rango"
@@ -3274,8 +3333,9 @@ msgid "unknown conversion specifier %c"
msgstr "especificador de conversión %c desconocido"
#: py/objstr.c
-msgid "unknown format code '%c' for object of type '%q'"
-msgstr ""
+#, c-format
+msgid "unknown format code '%c' for object of type '%s'"
+msgstr "codigo format desconocido '%c' para el typo de objeto '%s'"
#: py/compile.c
msgid "unknown type"
@@ -3314,16 +3374,16 @@ msgid "unsupported format character '%c' (0x%x) at index %d"
msgstr "carácter no soportado '%c' (0x%x) en índice %d"
#: py/runtime.c
-msgid "unsupported type for %q: '%q'"
-msgstr ""
+msgid "unsupported type for %q: '%s'"
+msgstr "tipo no soportado para %q: '%s'"
#: py/runtime.c
msgid "unsupported type for operator"
msgstr "tipo de operador no soportado"
#: py/runtime.c
-msgid "unsupported types for %q: '%q', '%q'"
-msgstr ""
+msgid "unsupported types for %q: '%s', '%s'"
+msgstr "tipos no soportados para %q: '%s', '%s'"
#: py/objint.c
#, c-format
@@ -3336,7 +3396,7 @@ msgstr "value_count debe ser > 0"
#: extmod/ulab/code/linalg/linalg.c
msgid "vectors must have same lengths"
-msgstr "los vectores deben tener el mismo tamaño"
+msgstr ""
#: shared-bindings/watchdog/WatchDogTimer.c
msgid "watchdog timeout must be greater than 0"
@@ -3402,124 +3462,18 @@ msgstr "zi debe ser de tipo flotante"
msgid "zi must be of shape (n_section, 2)"
msgstr "zi debe ser una forma (n_section,2)"
-#~ msgid "%q indices must be integers, not %s"
-#~ msgstr "%q indices deben ser enteros, no %s"
-
-#~ msgid "'%s' object cannot assign attribute '%q'"
-#~ msgstr "El objeto '%s' no puede asignar al atributo '%q'"
-
-#~ msgid "'%s' object does not support '%q'"
-#~ msgstr "El objeto '%s' no admite '%q'"
-
-#~ msgid "'%s' object does not support item assignment"
-#~ msgstr "el objeto '%s' no soporta la asignación de elementos"
-
-#~ msgid "'%s' object does not support item deletion"
-#~ msgstr "objeto '%s' no soporta la eliminación de elementos"
-
-#~ msgid "'%s' object has no attribute '%q'"
-#~ msgstr "objeto '%s' no tiene atributo '%q'"
-
-#~ msgid "'%s' object is not an iterator"
-#~ msgstr "objeto '%s' no es un iterator"
-
-#~ msgid "'%s' object is not callable"
-#~ msgstr "objeto '%s' no puede ser llamado"
-
-#~ msgid "'%s' object is not iterable"
-#~ msgstr "objeto '%s' no es iterable"
-
-#~ msgid "'%s' object is not subscriptable"
-#~ msgstr "el objeto '%s' no es suscriptable"
-
-#~ msgid "Pop from an empty Ps2 buffer"
-#~ msgstr "Pop de un buffer Ps2 vacio"
-
-#~ msgid "Running in safe mode! Auto-reload is off.\n"
-#~ msgstr "Ejecutando en modo seguro! La auto-recarga esta deshabilitada.\n"
-
-#~ msgid "Running in safe mode! Not running saved code.\n"
-#~ msgstr ""
-#~ "Ejecutando en modo seguro! No se esta ejecutando el código guardado.\n"
-
-#~ msgid "__init__() should return None, not '%s'"
-#~ msgstr "__init__() deberia devolver None, no '%s'"
-
-#~ msgid "can't convert %s to complex"
-#~ msgstr "no se puede convertir %s a complejo"
-
-#~ msgid "can't convert %s to float"
-#~ msgstr "no se puede convertir %s a float"
-
-#~ msgid "can't convert %s to int"
-#~ msgstr "no se puede convertir %s a int"
-
-#~ msgid "can't convert NaN to int"
-#~ msgstr "no se puede convertir Nan a int"
-
-#~ msgid "can't convert address to int"
-#~ msgstr "no se puede convertir address a int"
-
-#~ msgid "can't convert inf to int"
-#~ msgstr "no se puede convertir inf en int"
-
-#~ msgid "can't convert to complex"
-#~ msgstr "no se puede convertir a complejo"
-
-#~ msgid "can't convert to float"
-#~ msgstr "no se puede convertir a float"
-
-#~ msgid "can't convert to int"
-#~ msgstr "no se puede convertir a int"
-
-#~ msgid "object '%s' is not a tuple or list"
-#~ msgstr "el objeto '%s' no es una tupla o lista"
-
-#~ msgid "object of type '%s' has no len()"
-#~ msgstr "el objeto de tipo '%s' no tiene len()"
-
-#~ msgid "pop from an empty PulseIn"
-#~ msgstr "pop de un PulseIn vacío"
-
-#~ msgid "pop from an empty set"
-#~ msgstr "pop desde un set vacío"
-
-#~ msgid "pop from empty list"
-#~ msgstr "pop desde una lista vacía"
-
-#~ msgid "popitem(): dictionary is empty"
-#~ msgstr "popitem(): diccionario vacío"
-
-#~ msgid "string index out of range"
-#~ msgstr "string index fuera de rango"
-
-#~ msgid "string indices must be integers, not %s"
-#~ msgstr "índices de string deben ser enteros, no %s"
-
-#~ msgid "struct: index out of range"
-#~ msgstr "struct: index fuera de rango"
-
-#~ msgid "unknown format code '%c' for object of type '%s'"
-#~ msgstr "codigo format desconocido '%c' para el typo de objeto '%s'"
-
-#~ msgid "unsupported type for %q: '%s'"
-#~ msgstr "tipo no soportado para %q: '%s'"
-
-#~ msgid "unsupported types for %q: '%s', '%s'"
-#~ msgstr "tipos no soportados para %q: '%s', '%s'"
-
#~ msgid "'%q' object is not bytes-like"
#~ msgstr "el objeto '%q' no es similar a bytes"
#~ msgid "'async for' or 'async with' outside async function"
#~ msgstr "'async for' o 'async with' fuera de la función async"
-#~ msgid "PulseIn not supported on this chip"
-#~ msgstr "PulseIn no es compatible con este chip"
-
#~ msgid "PulseOut not supported on this chip"
#~ msgstr "PulseOut no es compatible con este chip"
+#~ msgid "PulseIn not supported on this chip"
+#~ msgstr "PulseIn no es compatible con este chip"
+
#~ msgid "AP required"
#~ msgstr "AP requerido"
@@ -3763,8 +3717,8 @@ msgstr "zi debe ser una forma (n_section,2)"
#~ "Only monochrome, indexed 8bpp, and 16bpp or greater BMPs supported: %d "
#~ "bpp given"
#~ msgstr ""
-#~ "Solo se admiten BMP monocromos, indexados de 8bpp y 16bpp o superiores:%d "
-#~ "bppdado"
+#~ "Solo se admiten BMP monocromos, indexados de 8bpp y 16bpp o superiores:% "
+#~ "d bppdado"
#, fuzzy
#~ msgid "Only slices with step=1 (aka None) are supported"
diff --git a/locale/fil.po b/locale/fil.po
index 619fefc9e..07c8d270e 100644
--- a/locale/fil.po
+++ b/locale/fil.po
@@ -5,7 +5,7 @@ msgid ""
msgstr ""
"Project-Id-Version: \n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2020-08-04 18:42-0500\n"
+"POT-Creation-Date: 2020-07-28 16:57-0500\n"
"PO-Revision-Date: 2018-12-20 22:15-0800\n"
"Last-Translator: Timothy <me@timothygarcia.ca>\n"
"Language-Team: fil\n"
@@ -64,17 +64,13 @@ msgstr ""
msgid "%q in use"
msgstr "%q ay ginagamit"
-#: extmod/moductypes.c ports/atmel-samd/common-hal/pulseio/PulseIn.c
-#: ports/cxd56/common-hal/pulseio/PulseIn.c
-#: ports/nrf/common-hal/pulseio/PulseIn.c
-#: ports/stm/common-hal/pulseio/PulseIn.c py/obj.c py/objstr.c
-#: py/objstrunicode.c
+#: py/obj.c
msgid "%q index out of range"
msgstr "%q indeks wala sa sakop"
#: py/obj.c
-msgid "%q indices must be integers, not %q"
-msgstr ""
+msgid "%q indices must be integers, not %s"
+msgstr "%q indeks ay dapat integers, hindi %s"
#: shared-bindings/vectorio/Polygon.c
msgid "%q list must be a list"
@@ -115,42 +111,6 @@ msgstr ""
msgid "'%q' argument required"
msgstr "'%q' argument kailangan"
-#: py/runtime.c
-msgid "'%q' object cannot assign attribute '%q'"
-msgstr ""
-
-#: py/proto.c
-msgid "'%q' object does not support '%q'"
-msgstr ""
-
-#: py/obj.c
-msgid "'%q' object does not support item assignment"
-msgstr ""
-
-#: py/obj.c
-msgid "'%q' object does not support item deletion"
-msgstr ""
-
-#: py/runtime.c
-msgid "'%q' object has no attribute '%q'"
-msgstr ""
-
-#: py/runtime.c
-msgid "'%q' object is not an iterator"
-msgstr ""
-
-#: py/objtype.c py/runtime.c
-msgid "'%q' object is not callable"
-msgstr ""
-
-#: py/runtime.c
-msgid "'%q' object is not iterable"
-msgstr ""
-
-#: py/obj.c
-msgid "'%q' object is not subscriptable"
-msgstr ""
-
#: py/emitinlinethumb.c py/emitinlinextensa.c
#, c-format
msgid "'%s' expects a label"
@@ -201,6 +161,48 @@ msgstr "'%s' integer %d ay wala sa sakop ng %d..%d"
msgid "'%s' integer 0x%x does not fit in mask 0x%x"
msgstr "'%s' integer 0x%x ay wala sa mask na sakop ng 0x%x"
+#: py/runtime.c
+msgid "'%s' object cannot assign attribute '%q'"
+msgstr ""
+
+#: py/proto.c
+msgid "'%s' object does not support '%q'"
+msgstr ""
+
+#: py/obj.c
+#, c-format
+msgid "'%s' object does not support item assignment"
+msgstr "'%s' object hindi sumusuporta ng item assignment"
+
+#: py/obj.c
+#, c-format
+msgid "'%s' object does not support item deletion"
+msgstr "'%s' object ay hindi sumusuporta sa pagtanggal ng item"
+
+#: py/runtime.c
+msgid "'%s' object has no attribute '%q'"
+msgstr "'%s' object ay walang attribute '%q'"
+
+#: py/runtime.c
+#, c-format
+msgid "'%s' object is not an iterator"
+msgstr "'%s' object ay hindi iterator"
+
+#: py/objtype.c py/runtime.c
+#, c-format
+msgid "'%s' object is not callable"
+msgstr "'%s' object hindi matatawag"
+
+#: py/runtime.c
+#, c-format
+msgid "'%s' object is not iterable"
+msgstr "'%s' object ay hindi ma i-iterable"
+
+#: py/obj.c
+#, c-format
+msgid "'%s' object is not subscriptable"
+msgstr "'%s' object ay hindi maaaring i-subscript"
+
#: py/objstr.c
msgid "'=' alignment not allowed in string format specifier"
msgstr "'=' Gindi pinapayagan ang alignment sa pag specify ng string format"
@@ -871,10 +873,6 @@ msgstr "I/O operasyon sa saradong file"
msgid "I2C Init Error"
msgstr ""
-#: shared-bindings/audiobusio/I2SOut.c
-msgid "I2SOut not available"
-msgstr ""
-
#: shared-bindings/aesio/aes.c
#, c-format
msgid "IV must be %d bytes long"
@@ -1248,10 +1246,6 @@ msgstr "Hindi maka connect sa AP"
msgid "Not playing"
msgstr "Hindi playing"
-#: main.c
-msgid "Not running saved code.\n"
-msgstr ""
-
#: shared-bindings/util.c
msgid ""
"Object has been deinitialized and can no longer be used. Create a new object."
@@ -1340,6 +1334,10 @@ msgstr "Kasama ang kung ano pang modules na sa filesystem\n"
msgid "Polygon needs at least 3 points"
msgstr ""
+#: shared-bindings/ps2io/Ps2.c
+msgid "Pop from an empty Ps2 buffer"
+msgstr ""
+
#: shared-bindings/_bleio/Adapter.c
msgid "Prefix buffer must be on the heap"
msgstr ""
@@ -1415,8 +1413,12 @@ msgid "Row entry must be digitalio.DigitalInOut"
msgstr ""
#: main.c
-msgid "Running in safe mode! "
-msgstr ""
+msgid "Running in safe mode! Auto-reload is off.\n"
+msgstr "Tumatakbo sa safe mode! Awtomatikong pag re-reload ay OFF.\n"
+
+#: main.c
+msgid "Running in safe mode! Not running saved code.\n"
+msgstr "Tumatakbo sa safe mode! Hindi tumatakbo ang nai-save na code.\n"
#: shared-module/sdcardio/SDCard.c
msgid "SD card CSD format not supported"
@@ -1786,8 +1788,9 @@ msgid "__init__() should return None"
msgstr "__init __ () dapat magbalik na None"
#: py/objtype.c
-msgid "__init__() should return None, not '%q'"
-msgstr ""
+#, c-format
+msgid "__init__() should return None, not '%s'"
+msgstr "__init__() dapat magbalink na None, hindi '%s'"
#: py/objobject.c
msgid "__new__ arg must be a user-type"
@@ -1941,7 +1944,7 @@ msgstr "hindi sinusuportahan ang bytes > 8 bits"
msgid "bytes value out of range"
msgstr "bytes value wala sa sakop"
-#: ports/atmel-samd/bindings/samd/Clock.c ports/atmel-samd/common-hal/rtc/RTC.c
+#: ports/atmel-samd/bindings/samd/Clock.c
msgid "calibration is out of range"
msgstr "kalibrasion ay wala sa sakop"
@@ -1974,17 +1977,48 @@ msgstr ""
msgid "can't assign to expression"
msgstr "hindi ma i-assign sa expression"
-#: py/obj.c py/objint.c shared-bindings/i2cperipheral/I2CPeripheral.c
-msgid "can't convert %q to %q"
-msgstr ""
+#: py/obj.c
+#, c-format
+msgid "can't convert %s to complex"
+msgstr "hindi ma-convert %s sa complex"
+
+#: py/obj.c
+#, c-format
+msgid "can't convert %s to float"
+msgstr "hindi ma-convert %s sa int"
+
+#: py/obj.c
+#, c-format
+msgid "can't convert %s to int"
+msgstr "hindi ma-convert %s sa int"
#: py/objstr.c
msgid "can't convert '%q' object to %q implicitly"
msgstr "hindi maaaring i-convert ang '%q' na bagay sa %q nang walang pahiwatig"
+#: py/objint.c
+msgid "can't convert NaN to int"
+msgstr "hindi ma i-convert NaN sa int"
+
+#: shared-bindings/i2cperipheral/I2CPeripheral.c
+msgid "can't convert address to int"
+msgstr "hindi ma i-convert ang address sa INT"
+
+#: py/objint.c
+msgid "can't convert inf to int"
+msgstr "hindi ma i-convert inf sa int"
+
#: py/obj.c
-msgid "can't convert to %q"
-msgstr ""
+msgid "can't convert to complex"
+msgstr "hindi ma-convert sa complex"
+
+#: py/obj.c
+msgid "can't convert to float"
+msgstr "hindi ma-convert sa float"
+
+#: py/obj.c
+msgid "can't convert to int"
+msgstr "hindi ma-convert sa int"
#: py/objstr.c
msgid "can't convert to str implicitly"
@@ -2017,7 +2051,7 @@ msgstr "hindi puede ang maraming *x"
#: py/emitnative.c
msgid "can't implicitly convert '%q' to 'bool'"
-msgstr "hindi maaaring ma-convert ang ' %q' sa 'bool'"
+msgstr "hindi maaaring ma-convert ang '% qt' sa 'bool'"
#: py/emitnative.c
msgid "can't load from '%q'"
@@ -2401,7 +2435,7 @@ msgstr "function nangangailangan ng keyword argument '%q'"
msgid "function missing required positional argument #%d"
msgstr "function nangangailangan ng positional argument #%d"
-#: py/argcheck.c py/bc.c py/objnamedtuple.c shared-bindings/time/__init__.c
+#: py/argcheck.c py/bc.c py/objnamedtuple.c
#, c-format
msgid "function takes %d positional arguments but %d were given"
msgstr ""
@@ -2451,7 +2485,10 @@ msgstr "mali ang padding"
msgid "index is out of bounds"
msgstr ""
-#: py/obj.c
+#: ports/atmel-samd/common-hal/pulseio/PulseIn.c
+#: ports/cxd56/common-hal/pulseio/PulseIn.c
+#: ports/nrf/common-hal/pulseio/PulseIn.c
+#: ports/stm/common-hal/pulseio/PulseIn.c py/obj.c
msgid "index out of range"
msgstr "index wala sa sakop"
@@ -2811,8 +2848,9 @@ msgid "number of points must be at least 2"
msgstr ""
#: py/obj.c
-msgid "object '%q' is not a tuple or list"
-msgstr ""
+#, c-format
+msgid "object '%s' is not a tuple or list"
+msgstr "object '%s' ay hindi tuple o list"
#: py/obj.c
msgid "object does not support item assignment"
@@ -2847,8 +2885,9 @@ msgid "object not iterable"
msgstr "object hindi ma i-iterable"
#: py/obj.c
-msgid "object of type '%q' has no len()"
-msgstr ""
+#, c-format
+msgid "object of type '%s' has no len()"
+msgstr "object na type '%s' walang len()"
#: py/obj.c
msgid "object with buffer protocol required"
@@ -2942,10 +2981,21 @@ msgstr ""
#: ports/atmel-samd/common-hal/pulseio/PulseIn.c
#: ports/cxd56/common-hal/pulseio/PulseIn.c
#: ports/nrf/common-hal/pulseio/PulseIn.c
-#: ports/stm/common-hal/pulseio/PulseIn.c py/objdict.c py/objlist.c py/objset.c
-#: shared-bindings/ps2io/Ps2.c
-msgid "pop from empty %q"
-msgstr ""
+#: ports/stm/common-hal/pulseio/PulseIn.c
+msgid "pop from an empty PulseIn"
+msgstr "pop mula sa walang laman na PulseIn"
+
+#: py/objset.c
+msgid "pop from an empty set"
+msgstr "pop sa walang laman na set"
+
+#: py/objlist.c
+msgid "pop from empty list"
+msgstr "pop galing sa walang laman na list"
+
+#: py/objdict.c
+msgid "popitem(): dictionary is empty"
+msgstr "popitem(): dictionary ay walang laman"
#: py/objint_mpz.c
msgid "pow() 3rd argument cannot be 0"
@@ -3104,8 +3154,13 @@ msgid "stream operation not supported"
msgstr "stream operation hindi sinusuportahan"
#: py/objstrunicode.c
-msgid "string indices must be integers, not %q"
-msgstr ""
+msgid "string index out of range"
+msgstr "indeks ng string wala sa sakop"
+
+#: py/objstrunicode.c
+#, c-format
+msgid "string indices must be integers, not %s"
+msgstr "ang indeks ng string ay dapat na integer, hindi %s"
#: py/stream.c
msgid "string not supported; use bytes or bytearray"
@@ -3116,6 +3171,10 @@ msgid "struct: cannot index"
msgstr "struct: hindi ma-index"
#: extmod/moductypes.c
+msgid "struct: index out of range"
+msgstr "struct: index hindi maabot"
+
+#: extmod/moductypes.c
msgid "struct: no fields"
msgstr "struct: walang fields"
@@ -3185,7 +3244,7 @@ msgstr "masyadong maraming values para i-unpact (umaasa ng %d)"
msgid "trapz is defined for 1D arrays of equal length"
msgstr ""
-#: extmod/ulab/code/linalg/linalg.c
+#: extmod/ulab/code/linalg/linalg.c py/objstr.c
msgid "tuple index out of range"
msgstr "indeks ng tuple wala sa sakop"
@@ -3252,8 +3311,9 @@ msgid "unknown conversion specifier %c"
msgstr "hindi alam ang conversion specifier na %c"
#: py/objstr.c
-msgid "unknown format code '%c' for object of type '%q'"
-msgstr ""
+#, c-format
+msgid "unknown format code '%c' for object of type '%s'"
+msgstr "hindi alam ang format code '%c' para sa object na ang type ay '%s'"
#: py/compile.c
msgid "unknown type"
@@ -3292,16 +3352,16 @@ msgid "unsupported format character '%c' (0x%x) at index %d"
msgstr "hindi sinusuportahan ang format character na '%c' (0x%x) sa index %d"
#: py/runtime.c
-msgid "unsupported type for %q: '%q'"
-msgstr ""
+msgid "unsupported type for %q: '%s'"
+msgstr "hindi sinusuportahang type para sa %q: '%s'"
#: py/runtime.c
msgid "unsupported type for operator"
msgstr "hindi sinusuportahang type para sa operator"
#: py/runtime.c
-msgid "unsupported types for %q: '%q', '%q'"
-msgstr ""
+msgid "unsupported types for %q: '%s', '%s'"
+msgstr "hindi sinusuportahang type para sa %q: '%s', '%s'"
#: py/objint.c
#, c-format
@@ -3382,102 +3442,6 @@ msgstr ""
msgid "zi must be of shape (n_section, 2)"
msgstr ""
-#~ msgid "%q indices must be integers, not %s"
-#~ msgstr "%q indeks ay dapat integers, hindi %s"
-
-#~ msgid "'%s' object does not support item assignment"
-#~ msgstr "'%s' object hindi sumusuporta ng item assignment"
-
-#~ msgid "'%s' object does not support item deletion"
-#~ msgstr "'%s' object ay hindi sumusuporta sa pagtanggal ng item"
-
-#~ msgid "'%s' object has no attribute '%q'"
-#~ msgstr "'%s' object ay walang attribute '%q'"
-
-#~ msgid "'%s' object is not an iterator"
-#~ msgstr "'%s' object ay hindi iterator"
-
-#~ msgid "'%s' object is not callable"
-#~ msgstr "'%s' object hindi matatawag"
-
-#~ msgid "'%s' object is not iterable"
-#~ msgstr "'%s' object ay hindi ma i-iterable"
-
-#~ msgid "'%s' object is not subscriptable"
-#~ msgstr "'%s' object ay hindi maaaring i-subscript"
-
-#~ msgid "Running in safe mode! Auto-reload is off.\n"
-#~ msgstr "Tumatakbo sa safe mode! Awtomatikong pag re-reload ay OFF.\n"
-
-#~ msgid "Running in safe mode! Not running saved code.\n"
-#~ msgstr "Tumatakbo sa safe mode! Hindi tumatakbo ang nai-save na code.\n"
-
-#~ msgid "__init__() should return None, not '%s'"
-#~ msgstr "__init__() dapat magbalink na None, hindi '%s'"
-
-#~ msgid "can't convert %s to complex"
-#~ msgstr "hindi ma-convert %s sa complex"
-
-#~ msgid "can't convert %s to float"
-#~ msgstr "hindi ma-convert %s sa int"
-
-#~ msgid "can't convert %s to int"
-#~ msgstr "hindi ma-convert %s sa int"
-
-#~ msgid "can't convert NaN to int"
-#~ msgstr "hindi ma i-convert NaN sa int"
-
-#~ msgid "can't convert address to int"
-#~ msgstr "hindi ma i-convert ang address sa INT"
-
-#~ msgid "can't convert inf to int"
-#~ msgstr "hindi ma i-convert inf sa int"
-
-#~ msgid "can't convert to complex"
-#~ msgstr "hindi ma-convert sa complex"
-
-#~ msgid "can't convert to float"
-#~ msgstr "hindi ma-convert sa float"
-
-#~ msgid "can't convert to int"
-#~ msgstr "hindi ma-convert sa int"
-
-#~ msgid "object '%s' is not a tuple or list"
-#~ msgstr "object '%s' ay hindi tuple o list"
-
-#~ msgid "object of type '%s' has no len()"
-#~ msgstr "object na type '%s' walang len()"
-
-#~ msgid "pop from an empty PulseIn"
-#~ msgstr "pop mula sa walang laman na PulseIn"
-
-#~ msgid "pop from an empty set"
-#~ msgstr "pop sa walang laman na set"
-
-#~ msgid "pop from empty list"
-#~ msgstr "pop galing sa walang laman na list"
-
-#~ msgid "popitem(): dictionary is empty"
-#~ msgstr "popitem(): dictionary ay walang laman"
-
-#~ msgid "string index out of range"
-#~ msgstr "indeks ng string wala sa sakop"
-
-#~ msgid "string indices must be integers, not %s"
-#~ msgstr "ang indeks ng string ay dapat na integer, hindi %s"
-
-#~ msgid "struct: index out of range"
-#~ msgstr "struct: index hindi maabot"
-
-#~ msgid "unknown format code '%c' for object of type '%s'"
-#~ msgstr "hindi alam ang format code '%c' para sa object na ang type ay '%s'"
-
-#~ msgid "unsupported type for %q: '%s'"
-#~ msgstr "hindi sinusuportahang type para sa %q: '%s'"
-
-#~ msgid "unsupported types for %q: '%s', '%s'"
-#~ msgstr "hindi sinusuportahang type para sa %q: '%s', '%s'"
-
#~ msgid "AP required"
#~ msgstr "AP kailangan"
diff --git a/locale/fr.po b/locale/fr.po
index 08a47bb9b..f16450105 100644
--- a/locale/fr.po
+++ b/locale/fr.po
@@ -7,15 +7,15 @@ msgid ""
msgstr ""
"Project-Id-Version: 0.1\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2020-08-04 18:42-0500\n"
-"PO-Revision-Date: 2020-06-05 17:29+0000\n"
-"Last-Translator: aberwag <aberwag@gmail.com>\n"
+"POT-Creation-Date: 2020-07-28 16:57-0500\n"
+"PO-Revision-Date: 2020-07-27 21:27+0000\n"
+"Last-Translator: Nathan <bonnemainsnathan@gmail.com>\n"
"Language: fr\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=utf-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=2; plural=n > 1;\n"
-"X-Generator: Weblate 4.1-dev\n"
+"X-Generator: Weblate 4.2-dev\n"
#: main.c
msgid ""
@@ -70,23 +70,19 @@ msgstr ""
#: ports/atmel-samd/common-hal/sdioio/SDCard.c
msgid "%q failure: %d"
-msgstr ""
+msgstr "Échec de %q : %d"
#: shared-bindings/microcontroller/Pin.c
msgid "%q in use"
msgstr "%q utilisé"
-#: extmod/moductypes.c ports/atmel-samd/common-hal/pulseio/PulseIn.c
-#: ports/cxd56/common-hal/pulseio/PulseIn.c
-#: ports/nrf/common-hal/pulseio/PulseIn.c
-#: ports/stm/common-hal/pulseio/PulseIn.c py/obj.c py/objstr.c
-#: py/objstrunicode.c
+#: py/obj.c
msgid "%q index out of range"
msgstr "index %q hors gamme"
#: py/obj.c
-msgid "%q indices must be integers, not %q"
-msgstr ""
+msgid "%q indices must be integers, not %s"
+msgstr "les indices %q doivent être des entiers, pas %s"
#: shared-bindings/vectorio/Polygon.c
msgid "%q list must be a list"
@@ -94,7 +90,7 @@ msgstr "La liste %q doit être une liste"
#: shared-bindings/memorymonitor/AllocationAlarm.c
msgid "%q must be >= 0"
-msgstr ""
+msgstr "%q doit être >= 0"
#: shared-bindings/_bleio/CharacteristicBuffer.c
#: shared-bindings/_bleio/PacketBuffer.c shared-bindings/displayio/Group.c
@@ -110,7 +106,7 @@ msgstr "%q doit être un tuple de longueur 2"
#: ports/atmel-samd/common-hal/sdioio/SDCard.c
msgid "%q pin invalid"
-msgstr ""
+msgstr "PIN %q invalide"
#: shared-bindings/fontio/BuiltinFont.c
msgid "%q should be an int"
@@ -124,42 +120,6 @@ msgstr "%q() prend %d arguments positionnels mais %d ont été donnés"
msgid "'%q' argument required"
msgstr "'%q' argument requis"
-#: py/runtime.c
-msgid "'%q' object cannot assign attribute '%q'"
-msgstr ""
-
-#: py/proto.c
-msgid "'%q' object does not support '%q'"
-msgstr ""
-
-#: py/obj.c
-msgid "'%q' object does not support item assignment"
-msgstr ""
-
-#: py/obj.c
-msgid "'%q' object does not support item deletion"
-msgstr ""
-
-#: py/runtime.c
-msgid "'%q' object has no attribute '%q'"
-msgstr ""
-
-#: py/runtime.c
-msgid "'%q' object is not an iterator"
-msgstr ""
-
-#: py/objtype.c py/runtime.c
-msgid "'%q' object is not callable"
-msgstr ""
-
-#: py/runtime.c
-msgid "'%q' object is not iterable"
-msgstr ""
-
-#: py/obj.c
-msgid "'%q' object is not subscriptable"
-msgstr ""
-
#: py/emitinlinethumb.c py/emitinlinextensa.c
#, c-format
msgid "'%s' expects a label"
@@ -210,6 +170,48 @@ msgstr "'%s' l'entier %d n'est pas dans la gamme %d..%d"
msgid "'%s' integer 0x%x does not fit in mask 0x%x"
msgstr "'%s' l'entier 0x%x ne correspond pas au masque 0x%x"
+#: py/runtime.c
+msgid "'%s' object cannot assign attribute '%q'"
+msgstr "L'objet '%s' ne peut pas attribuer '%q'"
+
+#: py/proto.c
+msgid "'%s' object does not support '%q'"
+msgstr "L'objet '%s' ne prend pas en charge '%q'"
+
+#: py/obj.c
+#, c-format
+msgid "'%s' object does not support item assignment"
+msgstr "l'objet '%s' ne supporte pas l'assignation d'éléments"
+
+#: py/obj.c
+#, c-format
+msgid "'%s' object does not support item deletion"
+msgstr "l'objet '%s' ne supporte pas la suppression d'éléments"
+
+#: py/runtime.c
+msgid "'%s' object has no attribute '%q'"
+msgstr "l'objet '%s' n'a pas d'attribut '%q'"
+
+#: py/runtime.c
+#, c-format
+msgid "'%s' object is not an iterator"
+msgstr "l'objet '%s' n'est pas un itérateur"
+
+#: py/objtype.c py/runtime.c
+#, c-format
+msgid "'%s' object is not callable"
+msgstr "l'objet '%s' n'est pas appelable"
+
+#: py/runtime.c
+#, c-format
+msgid "'%s' object is not iterable"
+msgstr "l'objet '%s' n'est pas itérable"
+
+#: py/obj.c
+#, c-format
+msgid "'%s' object is not subscriptable"
+msgstr "l'objet '%s' n'est pas sous-scriptable"
+
#: py/objstr.c
msgid "'=' alignment not allowed in string format specifier"
msgstr "'=' alignement non autorisé dans la spéc. de format de chaîne"
@@ -240,7 +242,7 @@ msgstr "'continue' en dehors d'une boucle"
#: py/objgenerator.c
msgid "'coroutine' object is not an iterator"
-msgstr ""
+msgstr "L'objet « coroutine » n'est pas un itérateur"
#: py/compile.c
msgid "'data' requires at least 2 arguments"
@@ -335,7 +337,7 @@ msgstr "S'annonce déjà."
#: shared-module/memorymonitor/AllocationAlarm.c
#: shared-module/memorymonitor/AllocationSize.c
msgid "Already running"
-msgstr ""
+msgstr "Déjà en cours d'exécution"
#: ports/cxd56/common-hal/analogio/AnalogIn.c
msgid "AnalogIn not supported on given pin"
@@ -376,7 +378,7 @@ msgstr "Au plus %d %q peut être spécifié (pas %d)"
#: shared-module/memorymonitor/AllocationAlarm.c
#, c-format
msgid "Attempt to allocate %d blocks"
-msgstr ""
+msgstr "Tentative d'allocation de %d blocs"
#: supervisor/shared/safe_mode.c
msgid "Attempted heap allocation when MicroPython VM not running."
@@ -460,7 +462,7 @@ msgstr "La longueur du tampon %d est trop grande. Il doit être inférieur à %d
#: ports/atmel-samd/common-hal/sdioio/SDCard.c
#: ports/cxd56/common-hal/sdioio/SDCard.c shared-module/sdcardio/SDCard.c
msgid "Buffer length must be a multiple of 512"
-msgstr ""
+msgstr "La longueur de la mémoire tampon doit être un multiple de 512"
#: shared-bindings/bitbangio/I2C.c shared-bindings/busio/I2C.c
msgid "Buffer must be at least length 1"
@@ -631,11 +633,11 @@ msgstr "Code brut corrompu"
#: ports/cxd56/common-hal/gnss/GNSS.c
msgid "Could not initialize GNSS"
-msgstr ""
+msgstr "Impossible d'initialiser GNSS"
#: ports/cxd56/common-hal/sdioio/SDCard.c
msgid "Could not initialize SDCard"
-msgstr ""
+msgstr "Impossible d'initialiser la carte SD"
#: ports/atmel-samd/common-hal/busio/UART.c ports/cxd56/common-hal/busio/UART.c
msgid "Could not initialize UART"
@@ -885,10 +887,6 @@ msgstr "opération d'E/S sur un fichier fermé"
msgid "I2C Init Error"
msgstr "Erreur d'initialisation I2C"
-#: shared-bindings/audiobusio/I2SOut.c
-msgid "I2SOut not available"
-msgstr ""
-
#: shared-bindings/aesio/aes.c
#, c-format
msgid "IV must be %d bytes long"
@@ -929,7 +927,7 @@ msgstr "Erreur interne #%d"
#: shared-bindings/sdioio/SDCard.c
msgid "Invalid %q"
-msgstr ""
+msgstr "%q invalide"
#: ports/atmel-samd/common-hal/audiobusio/I2SOut.c
#: ports/atmel-samd/common-hal/audiobusio/PDMIn.c
@@ -1145,7 +1143,7 @@ msgstr "Doit fournir une broche MISO ou MOSI"
#: ports/stm/common-hal/busio/SPI.c
msgid "Must provide SCK pin"
-msgstr ""
+msgstr "Vous devez fournir un code PIN SCK"
#: shared-bindings/rgbmatrix/RGBMatrix.c
#, c-format
@@ -1261,10 +1259,6 @@ msgstr "Non connecté"
msgid "Not playing"
msgstr "Ne joue pas"
-#: main.c
-msgid "Not running saved code.\n"
-msgstr ""
-
#: shared-bindings/util.c
msgid ""
"Object has been deinitialized and can no longer be used. Create a new object."
@@ -1363,6 +1357,10 @@ msgstr "Ainsi que tout autre module présent sur le système de fichiers\n"
msgid "Polygon needs at least 3 points"
msgstr "Polygone a besoin d’au moins 3 points"
+#: shared-bindings/ps2io/Ps2.c
+msgid "Pop from an empty Ps2 buffer"
+msgstr "Pop à partir d'un tampon Ps2 vide"
+
#: shared-bindings/_bleio/Adapter.c
msgid "Prefix buffer must be on the heap"
msgstr "Le tampon de préfixe doit être sur le tas"
@@ -1435,12 +1433,16 @@ msgid "Row entry must be digitalio.DigitalInOut"
msgstr "L'entrée de ligne 'Row' doit être un digitalio.DigitalInOut"
#: main.c
-msgid "Running in safe mode! "
-msgstr ""
+msgid "Running in safe mode! Auto-reload is off.\n"
+msgstr "Mode sans-échec ! Auto-chargement désactivé.\n"
+
+#: main.c
+msgid "Running in safe mode! Not running saved code.\n"
+msgstr "Mode sans-échec ! Le code sauvegardé n'est pas éxecuté.\n"
#: shared-module/sdcardio/SDCard.c
msgid "SD card CSD format not supported"
-msgstr ""
+msgstr "Le format de carte SD CSD n'est pas pris en charge"
#: ports/atmel-samd/common-hal/busio/I2C.c
#: ports/mimxrt10xx/common-hal/busio/I2C.c ports/nrf/common-hal/busio/I2C.c
@@ -1514,7 +1516,7 @@ msgstr "Fournissez au moins une broche UART"
#: shared-bindings/gnss/GNSS.c
msgid "System entry must be gnss.SatelliteSystem"
-msgstr ""
+msgstr "L'entrée du système doit être gnss.SatelliteSystem"
#: ports/stm/common-hal/microcontroller/Processor.c
msgid "Temperature read timed out"
@@ -1822,8 +1824,9 @@ msgid "__init__() should return None"
msgstr "__init__() doit retourner None"
#: py/objtype.c
-msgid "__init__() should return None, not '%q'"
-msgstr ""
+#, c-format
+msgid "__init__() should return None, not '%s'"
+msgstr "__init__() doit retourner None, pas '%s'"
#: py/objobject.c
msgid "__new__ arg must be a user-type"
@@ -1976,7 +1979,7 @@ msgstr "octets > 8 bits non supporté"
msgid "bytes value out of range"
msgstr "valeur des octets hors bornes"
-#: ports/atmel-samd/bindings/samd/Clock.c ports/atmel-samd/common-hal/rtc/RTC.c
+#: ports/atmel-samd/bindings/samd/Clock.c
msgid "calibration is out of range"
msgstr "étalonnage hors bornes"
@@ -2009,17 +2012,48 @@ msgstr ""
msgid "can't assign to expression"
msgstr "ne peut pas assigner à une expression"
-#: py/obj.c py/objint.c shared-bindings/i2cperipheral/I2CPeripheral.c
-msgid "can't convert %q to %q"
-msgstr ""
+#: py/obj.c
+#, c-format
+msgid "can't convert %s to complex"
+msgstr "ne peut convertir %s en nombre complexe"
+
+#: py/obj.c
+#, c-format
+msgid "can't convert %s to float"
+msgstr "ne peut convertir %s en nombre à virgule flottante 'float'"
+
+#: py/obj.c
+#, c-format
+msgid "can't convert %s to int"
+msgstr "ne peut convertir %s en entier 'int'"
#: py/objstr.c
msgid "can't convert '%q' object to %q implicitly"
msgstr "impossible de convertir l'objet '%q' en '%q' implicitement"
+#: py/objint.c
+msgid "can't convert NaN to int"
+msgstr "on ne peut convertir NaN en entier 'int'"
+
+#: shared-bindings/i2cperipheral/I2CPeripheral.c
+msgid "can't convert address to int"
+msgstr "ne peut convertir l'adresse en entier 'int'"
+
+#: py/objint.c
+msgid "can't convert inf to int"
+msgstr "on ne peut convertir l'infini 'inf' en entier 'int'"
+
#: py/obj.c
-msgid "can't convert to %q"
-msgstr ""
+msgid "can't convert to complex"
+msgstr "ne peut convertir en nombre complexe"
+
+#: py/obj.c
+msgid "can't convert to float"
+msgstr "ne peut convertir en nombre à virgule flottante 'float'"
+
+#: py/obj.c
+msgid "can't convert to int"
+msgstr "ne peut convertir en entier 'int'"
#: py/objstr.c
msgid "can't convert to str implicitly"
@@ -2075,7 +2109,7 @@ msgstr ""
#: shared-module/sdcardio/SDCard.c
msgid "can't set 512 block size"
-msgstr ""
+msgstr "impossible de définir une taille de bloc de 512"
#: py/objnamedtuple.c
msgid "can't set attribute"
@@ -2212,7 +2246,7 @@ msgstr "n'a pas pu inverser la matrice Vandermonde"
#: shared-module/sdcardio/SDCard.c
msgid "couldn't determine SD card version"
-msgstr ""
+msgstr "impossible de déterminer la version de la carte SD"
#: extmod/ulab/code/approx/approx.c
msgid "data must be iterable"
@@ -2442,7 +2476,7 @@ msgstr "il manque l'argument nommé obligatoire '%q'"
msgid "function missing required positional argument #%d"
msgstr "il manque l'argument positionnel obligatoire #%d"
-#: py/argcheck.c py/bc.c py/objnamedtuple.c shared-bindings/time/__init__.c
+#: py/argcheck.c py/bc.c py/objnamedtuple.c
#, c-format
msgid "function takes %d positional arguments but %d were given"
msgstr "la fonction prend %d argument(s) positionnels mais %d ont été donné(s)"
@@ -2491,7 +2525,10 @@ msgstr "espacement incorrect"
msgid "index is out of bounds"
msgstr "l'index est hors limites"
-#: py/obj.c
+#: ports/atmel-samd/common-hal/pulseio/PulseIn.c
+#: ports/cxd56/common-hal/pulseio/PulseIn.c
+#: ports/nrf/common-hal/pulseio/PulseIn.c
+#: ports/stm/common-hal/pulseio/PulseIn.c py/obj.c
msgid "index out of range"
msgstr "index hors gamme"
@@ -2780,7 +2817,7 @@ msgstr "compte de décalage négatif"
#: shared-module/sdcardio/SDCard.c
msgid "no SD card"
-msgstr ""
+msgstr "pas de carte SD"
#: py/vm.c
msgid "no active exception to reraise"
@@ -2805,7 +2842,7 @@ msgstr "pas de broche de réinitialisation disponible"
#: shared-module/sdcardio/SDCard.c
msgid "no response from SD card"
-msgstr ""
+msgstr "pas de réponse de la carte SD"
#: py/runtime.c
msgid "no such attribute"
@@ -2854,8 +2891,9 @@ msgid "number of points must be at least 2"
msgstr "le nombre de points doit être d'au moins 2"
#: py/obj.c
-msgid "object '%q' is not a tuple or list"
-msgstr ""
+#, c-format
+msgid "object '%s' is not a tuple or list"
+msgstr "l'objet '%s' n'est pas un tuple ou une liste"
#: py/obj.c
msgid "object does not support item assignment"
@@ -2890,8 +2928,9 @@ msgid "object not iterable"
msgstr "objet non itérable"
#: py/obj.c
-msgid "object of type '%q' has no len()"
-msgstr ""
+#, c-format
+msgid "object of type '%s' has no len()"
+msgstr "l'objet de type '%s' n'a pas de len()"
#: py/obj.c
msgid "object with buffer protocol required"
@@ -2986,10 +3025,21 @@ msgstr "le polygone ne peut être enregistré que dans un parent"
#: ports/atmel-samd/common-hal/pulseio/PulseIn.c
#: ports/cxd56/common-hal/pulseio/PulseIn.c
#: ports/nrf/common-hal/pulseio/PulseIn.c
-#: ports/stm/common-hal/pulseio/PulseIn.c py/objdict.c py/objlist.c py/objset.c
-#: shared-bindings/ps2io/Ps2.c
-msgid "pop from empty %q"
-msgstr ""
+#: ports/stm/common-hal/pulseio/PulseIn.c
+msgid "pop from an empty PulseIn"
+msgstr "'pop' d'une entrée PulseIn vide"
+
+#: py/objset.c
+msgid "pop from an empty set"
+msgstr "'pop' d'un ensemble set vide"
+
+#: py/objlist.c
+msgid "pop from empty list"
+msgstr "'pop' d'une liste vide"
+
+#: py/objdict.c
+msgid "popitem(): dictionary is empty"
+msgstr "popitem() : dictionnaire vide"
#: py/objint_mpz.c
msgid "pow() 3rd argument cannot be 0"
@@ -3147,8 +3197,13 @@ msgid "stream operation not supported"
msgstr "opération de flux non supportée"
#: py/objstrunicode.c
-msgid "string indices must be integers, not %q"
-msgstr ""
+msgid "string index out of range"
+msgstr "index de chaîne hors gamme"
+
+#: py/objstrunicode.c
+#, c-format
+msgid "string indices must be integers, not %s"
+msgstr "les indices de chaîne de caractères doivent être des entiers, pas %s"
#: py/stream.c
msgid "string not supported; use bytes or bytearray"
@@ -3160,6 +3215,10 @@ msgid "struct: cannot index"
msgstr "struct : indexage impossible"
#: extmod/moductypes.c
+msgid "struct: index out of range"
+msgstr "struct : index hors limites"
+
+#: extmod/moductypes.c
msgid "struct: no fields"
msgstr "struct : aucun champs"
@@ -3228,7 +3287,7 @@ msgstr "trop de valeur à dégrouper (%d attendues)"
msgid "trapz is defined for 1D arrays of equal length"
msgstr ""
-#: extmod/ulab/code/linalg/linalg.c
+#: extmod/ulab/code/linalg/linalg.c py/objstr.c
msgid "tuple index out of range"
msgstr "index du tuple hors gamme"
@@ -3295,8 +3354,9 @@ msgid "unknown conversion specifier %c"
msgstr "spécification %c de conversion inconnue"
#: py/objstr.c
-msgid "unknown format code '%c' for object of type '%q'"
-msgstr ""
+#, c-format
+msgid "unknown format code '%c' for object of type '%s'"
+msgstr "code de format '%c' inconnu pour un objet de type '%s'"
#: py/compile.c
msgid "unknown type"
@@ -3335,16 +3395,16 @@ msgid "unsupported format character '%c' (0x%x) at index %d"
msgstr "caractère de format '%c' (0x%x) non supporté à l'index %d"
#: py/runtime.c
-msgid "unsupported type for %q: '%q'"
-msgstr ""
+msgid "unsupported type for %q: '%s'"
+msgstr "type non supporté pour %q : '%s'"
#: py/runtime.c
msgid "unsupported type for operator"
msgstr "type non supporté pour l'opérateur"
#: py/runtime.c
-msgid "unsupported types for %q: '%q', '%q'"
-msgstr ""
+msgid "unsupported types for %q: '%s', '%s'"
+msgstr "type non supporté pour %q : '%s', '%s'"
#: py/objint.c
#, c-format
@@ -3423,121 +3483,15 @@ msgstr ""
msgid "zi must be of shape (n_section, 2)"
msgstr ""
-#~ msgid "%q indices must be integers, not %s"
-#~ msgstr "les indices %q doivent être des entiers, pas %s"
-
-#~ msgid "'%s' object cannot assign attribute '%q'"
-#~ msgstr "L'objet '%s' ne peut pas attribuer '%q'"
-
-#~ msgid "'%s' object does not support '%q'"
-#~ msgstr "L'objet '%s' ne prend pas en charge '%q'"
-
-#~ msgid "'%s' object does not support item assignment"
-#~ msgstr "l'objet '%s' ne supporte pas l'assignation d'éléments"
-
-#~ msgid "'%s' object does not support item deletion"
-#~ msgstr "l'objet '%s' ne supporte pas la suppression d'éléments"
-
-#~ msgid "'%s' object has no attribute '%q'"
-#~ msgstr "l'objet '%s' n'a pas d'attribut '%q'"
-
-#~ msgid "'%s' object is not an iterator"
-#~ msgstr "l'objet '%s' n'est pas un itérateur"
-
-#~ msgid "'%s' object is not callable"
-#~ msgstr "l'objet '%s' n'est pas appelable"
-
-#~ msgid "'%s' object is not iterable"
-#~ msgstr "l'objet '%s' n'est pas itérable"
-
-#~ msgid "'%s' object is not subscriptable"
-#~ msgstr "l'objet '%s' n'est pas sous-scriptable"
-
-#~ msgid "Pop from an empty Ps2 buffer"
-#~ msgstr "Pop à partir d'un tampon Ps2 vide"
-
-#~ msgid "Running in safe mode! Auto-reload is off.\n"
-#~ msgstr "Mode sans-échec ! Auto-chargement désactivé.\n"
-
-#~ msgid "Running in safe mode! Not running saved code.\n"
-#~ msgstr "Mode sans-échec ! Le code sauvegardé n'est pas éxecuté.\n"
-
-#~ msgid "__init__() should return None, not '%s'"
-#~ msgstr "__init__() doit retourner None, pas '%s'"
-
-#~ msgid "can't convert %s to complex"
-#~ msgstr "ne peut convertir %s en nombre complexe"
-
-#~ msgid "can't convert %s to float"
-#~ msgstr "ne peut convertir %s en nombre à virgule flottante 'float'"
-
-#~ msgid "can't convert %s to int"
-#~ msgstr "ne peut convertir %s en entier 'int'"
-
-#~ msgid "can't convert NaN to int"
-#~ msgstr "on ne peut convertir NaN en entier 'int'"
-
-#~ msgid "can't convert address to int"
-#~ msgstr "ne peut convertir l'adresse en entier 'int'"
-
-#~ msgid "can't convert inf to int"
-#~ msgstr "on ne peut convertir l'infini 'inf' en entier 'int'"
-
-#~ msgid "can't convert to complex"
-#~ msgstr "ne peut convertir en nombre complexe"
-
-#~ msgid "can't convert to float"
-#~ msgstr "ne peut convertir en nombre à virgule flottante 'float'"
-
-#~ msgid "can't convert to int"
-#~ msgstr "ne peut convertir en entier 'int'"
-
-#~ msgid "object '%s' is not a tuple or list"
-#~ msgstr "l'objet '%s' n'est pas un tuple ou une liste"
-
-#~ msgid "object of type '%s' has no len()"
-#~ msgstr "l'objet de type '%s' n'a pas de len()"
-
-#~ msgid "pop from an empty PulseIn"
-#~ msgstr "'pop' d'une entrée PulseIn vide"
-
-#~ msgid "pop from an empty set"
-#~ msgstr "'pop' d'un ensemble set vide"
-
-#~ msgid "pop from empty list"
-#~ msgstr "'pop' d'une liste vide"
-
-#~ msgid "popitem(): dictionary is empty"
-#~ msgstr "popitem() : dictionnaire vide"
-
-#~ msgid "string index out of range"
-#~ msgstr "index de chaîne hors gamme"
-
-#~ msgid "string indices must be integers, not %s"
-#~ msgstr ""
-#~ "les indices de chaîne de caractères doivent être des entiers, pas %s"
-
-#~ msgid "struct: index out of range"
-#~ msgstr "struct : index hors limites"
-
-#~ msgid "unknown format code '%c' for object of type '%s'"
-#~ msgstr "code de format '%c' inconnu pour un objet de type '%s'"
-
-#~ msgid "unsupported type for %q: '%s'"
-#~ msgstr "type non supporté pour %q : '%s'"
-
-#~ msgid "unsupported types for %q: '%s', '%s'"
-#~ msgstr "type non supporté pour %q : '%s', '%s'"
-
#~ msgid "'async for' or 'async with' outside async function"
#~ msgstr "'async for' ou 'async with' sans fonction asynchrone extérieure"
-#~ msgid "PulseIn not supported on this chip"
-#~ msgstr "PulseIn non pris en charge sur cette puce"
-
#~ msgid "PulseOut not supported on this chip"
#~ msgstr "PulseOut non pris en charge sur cette puce"
+#~ msgid "PulseIn not supported on this chip"
+#~ msgstr "PulseIn non pris en charge sur cette puce"
+
#~ msgid "AP required"
#~ msgstr "'AP' requis"
diff --git a/locale/hi.po b/locale/hi.po
index 956248fd3..79b974803 100644
--- a/locale/hi.po
+++ b/locale/hi.po
@@ -7,7 +7,7 @@ msgid ""
msgstr ""
"Project-Id-Version: PACKAGE VERSION\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2020-08-04 18:42-0500\n"
+"POT-Creation-Date: 2020-07-28 16:57-0500\n"
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
"Last-Translator: Automatically generated\n"
"Language-Team: none\n"
@@ -65,16 +65,12 @@ msgstr ""
msgid "%q in use"
msgstr ""
-#: extmod/moductypes.c ports/atmel-samd/common-hal/pulseio/PulseIn.c
-#: ports/cxd56/common-hal/pulseio/PulseIn.c
-#: ports/nrf/common-hal/pulseio/PulseIn.c
-#: ports/stm/common-hal/pulseio/PulseIn.c py/obj.c py/objstr.c
-#: py/objstrunicode.c
+#: py/obj.c
msgid "%q index out of range"
msgstr ""
#: py/obj.c
-msgid "%q indices must be integers, not %q"
+msgid "%q indices must be integers, not %s"
msgstr ""
#: shared-bindings/vectorio/Polygon.c
@@ -113,42 +109,6 @@ msgstr ""
msgid "'%q' argument required"
msgstr ""
-#: py/runtime.c
-msgid "'%q' object cannot assign attribute '%q'"
-msgstr ""
-
-#: py/proto.c
-msgid "'%q' object does not support '%q'"
-msgstr ""
-
-#: py/obj.c
-msgid "'%q' object does not support item assignment"
-msgstr ""
-
-#: py/obj.c
-msgid "'%q' object does not support item deletion"
-msgstr ""
-
-#: py/runtime.c
-msgid "'%q' object has no attribute '%q'"
-msgstr ""
-
-#: py/runtime.c
-msgid "'%q' object is not an iterator"
-msgstr ""
-
-#: py/objtype.c py/runtime.c
-msgid "'%q' object is not callable"
-msgstr ""
-
-#: py/runtime.c
-msgid "'%q' object is not iterable"
-msgstr ""
-
-#: py/obj.c
-msgid "'%q' object is not subscriptable"
-msgstr ""
-
#: py/emitinlinethumb.c py/emitinlinextensa.c
#, c-format
msgid "'%s' expects a label"
@@ -199,6 +159,48 @@ msgstr ""
msgid "'%s' integer 0x%x does not fit in mask 0x%x"
msgstr ""
+#: py/runtime.c
+msgid "'%s' object cannot assign attribute '%q'"
+msgstr ""
+
+#: py/proto.c
+msgid "'%s' object does not support '%q'"
+msgstr ""
+
+#: py/obj.c
+#, c-format
+msgid "'%s' object does not support item assignment"
+msgstr ""
+
+#: py/obj.c
+#, c-format
+msgid "'%s' object does not support item deletion"
+msgstr ""
+
+#: py/runtime.c
+msgid "'%s' object has no attribute '%q'"
+msgstr ""
+
+#: py/runtime.c
+#, c-format
+msgid "'%s' object is not an iterator"
+msgstr ""
+
+#: py/objtype.c py/runtime.c
+#, c-format
+msgid "'%s' object is not callable"
+msgstr ""
+
+#: py/runtime.c
+#, c-format
+msgid "'%s' object is not iterable"
+msgstr ""
+
+#: py/obj.c
+#, c-format
+msgid "'%s' object is not subscriptable"
+msgstr ""
+
#: py/objstr.c
msgid "'=' alignment not allowed in string format specifier"
msgstr ""
@@ -858,10 +860,6 @@ msgstr ""
msgid "I2C Init Error"
msgstr ""
-#: shared-bindings/audiobusio/I2SOut.c
-msgid "I2SOut not available"
-msgstr ""
-
#: shared-bindings/aesio/aes.c
#, c-format
msgid "IV must be %d bytes long"
@@ -1232,10 +1230,6 @@ msgstr ""
msgid "Not playing"
msgstr ""
-#: main.c
-msgid "Not running saved code.\n"
-msgstr ""
-
#: shared-bindings/util.c
msgid ""
"Object has been deinitialized and can no longer be used. Create a new object."
@@ -1321,6 +1315,10 @@ msgstr ""
msgid "Polygon needs at least 3 points"
msgstr ""
+#: shared-bindings/ps2io/Ps2.c
+msgid "Pop from an empty Ps2 buffer"
+msgstr ""
+
#: shared-bindings/_bleio/Adapter.c
msgid "Prefix buffer must be on the heap"
msgstr ""
@@ -1393,7 +1391,11 @@ msgid "Row entry must be digitalio.DigitalInOut"
msgstr ""
#: main.c
-msgid "Running in safe mode! "
+msgid "Running in safe mode! Auto-reload is off.\n"
+msgstr ""
+
+#: main.c
+msgid "Running in safe mode! Not running saved code.\n"
msgstr ""
#: shared-module/sdcardio/SDCard.c
@@ -1754,7 +1756,8 @@ msgid "__init__() should return None"
msgstr ""
#: py/objtype.c
-msgid "__init__() should return None, not '%q'"
+#, c-format
+msgid "__init__() should return None, not '%s'"
msgstr ""
#: py/objobject.c
@@ -1908,7 +1911,7 @@ msgstr ""
msgid "bytes value out of range"
msgstr ""
-#: ports/atmel-samd/bindings/samd/Clock.c ports/atmel-samd/common-hal/rtc/RTC.c
+#: ports/atmel-samd/bindings/samd/Clock.c
msgid "calibration is out of range"
msgstr ""
@@ -1940,16 +1943,47 @@ msgstr ""
msgid "can't assign to expression"
msgstr ""
-#: py/obj.c py/objint.c shared-bindings/i2cperipheral/I2CPeripheral.c
-msgid "can't convert %q to %q"
+#: py/obj.c
+#, c-format
+msgid "can't convert %s to complex"
+msgstr ""
+
+#: py/obj.c
+#, c-format
+msgid "can't convert %s to float"
+msgstr ""
+
+#: py/obj.c
+#, c-format
+msgid "can't convert %s to int"
msgstr ""
#: py/objstr.c
msgid "can't convert '%q' object to %q implicitly"
msgstr ""
+#: py/objint.c
+msgid "can't convert NaN to int"
+msgstr ""
+
+#: shared-bindings/i2cperipheral/I2CPeripheral.c
+msgid "can't convert address to int"
+msgstr ""
+
+#: py/objint.c
+msgid "can't convert inf to int"
+msgstr ""
+
+#: py/obj.c
+msgid "can't convert to complex"
+msgstr ""
+
#: py/obj.c
-msgid "can't convert to %q"
+msgid "can't convert to float"
+msgstr ""
+
+#: py/obj.c
+msgid "can't convert to int"
msgstr ""
#: py/objstr.c
@@ -2357,7 +2391,7 @@ msgstr ""
msgid "function missing required positional argument #%d"
msgstr ""
-#: py/argcheck.c py/bc.c py/objnamedtuple.c shared-bindings/time/__init__.c
+#: py/argcheck.c py/bc.c py/objnamedtuple.c
#, c-format
msgid "function takes %d positional arguments but %d were given"
msgstr ""
@@ -2406,7 +2440,10 @@ msgstr ""
msgid "index is out of bounds"
msgstr ""
-#: py/obj.c
+#: ports/atmel-samd/common-hal/pulseio/PulseIn.c
+#: ports/cxd56/common-hal/pulseio/PulseIn.c
+#: ports/nrf/common-hal/pulseio/PulseIn.c
+#: ports/stm/common-hal/pulseio/PulseIn.c py/obj.c
msgid "index out of range"
msgstr ""
@@ -2762,7 +2799,8 @@ msgid "number of points must be at least 2"
msgstr ""
#: py/obj.c
-msgid "object '%q' is not a tuple or list"
+#, c-format
+msgid "object '%s' is not a tuple or list"
msgstr ""
#: py/obj.c
@@ -2798,7 +2836,8 @@ msgid "object not iterable"
msgstr ""
#: py/obj.c
-msgid "object of type '%q' has no len()"
+#, c-format
+msgid "object of type '%s' has no len()"
msgstr ""
#: py/obj.c
@@ -2891,9 +2930,20 @@ msgstr ""
#: ports/atmel-samd/common-hal/pulseio/PulseIn.c
#: ports/cxd56/common-hal/pulseio/PulseIn.c
#: ports/nrf/common-hal/pulseio/PulseIn.c
-#: ports/stm/common-hal/pulseio/PulseIn.c py/objdict.c py/objlist.c py/objset.c
-#: shared-bindings/ps2io/Ps2.c
-msgid "pop from empty %q"
+#: ports/stm/common-hal/pulseio/PulseIn.c
+msgid "pop from an empty PulseIn"
+msgstr ""
+
+#: py/objset.c
+msgid "pop from an empty set"
+msgstr ""
+
+#: py/objlist.c
+msgid "pop from empty list"
+msgstr ""
+
+#: py/objdict.c
+msgid "popitem(): dictionary is empty"
msgstr ""
#: py/objint_mpz.c
@@ -3050,7 +3100,12 @@ msgid "stream operation not supported"
msgstr ""
#: py/objstrunicode.c
-msgid "string indices must be integers, not %q"
+msgid "string index out of range"
+msgstr ""
+
+#: py/objstrunicode.c
+#, c-format
+msgid "string indices must be integers, not %s"
msgstr ""
#: py/stream.c
@@ -3062,6 +3117,10 @@ msgid "struct: cannot index"
msgstr ""
#: extmod/moductypes.c
+msgid "struct: index out of range"
+msgstr ""
+
+#: extmod/moductypes.c
msgid "struct: no fields"
msgstr ""
@@ -3130,7 +3189,7 @@ msgstr ""
msgid "trapz is defined for 1D arrays of equal length"
msgstr ""
-#: extmod/ulab/code/linalg/linalg.c
+#: extmod/ulab/code/linalg/linalg.c py/objstr.c
msgid "tuple index out of range"
msgstr ""
@@ -3197,7 +3256,8 @@ msgid "unknown conversion specifier %c"
msgstr ""
#: py/objstr.c
-msgid "unknown format code '%c' for object of type '%q'"
+#, c-format
+msgid "unknown format code '%c' for object of type '%s'"
msgstr ""
#: py/compile.c
@@ -3237,7 +3297,7 @@ msgid "unsupported format character '%c' (0x%x) at index %d"
msgstr ""
#: py/runtime.c
-msgid "unsupported type for %q: '%q'"
+msgid "unsupported type for %q: '%s'"
msgstr ""
#: py/runtime.c
@@ -3245,7 +3305,7 @@ msgid "unsupported type for operator"
msgstr ""
#: py/runtime.c
-msgid "unsupported types for %q: '%q', '%q'"
+msgid "unsupported types for %q: '%s', '%s'"
msgstr ""
#: py/objint.c
diff --git a/locale/it_IT.po b/locale/it_IT.po
index 8f6c006aa..3862d382f 100644
--- a/locale/it_IT.po
+++ b/locale/it_IT.po
@@ -6,7 +6,7 @@ msgid ""
msgstr ""
"Project-Id-Version: PACKAGE VERSION\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2020-08-04 18:42-0500\n"
+"POT-Creation-Date: 2020-07-28 16:57-0500\n"
"PO-Revision-Date: 2018-10-02 16:27+0200\n"
"Last-Translator: Enrico Paganin <enrico.paganin@mail.com>\n"
"Language-Team: \n"
@@ -64,17 +64,13 @@ msgstr ""
msgid "%q in use"
msgstr "%q in uso"
-#: extmod/moductypes.c ports/atmel-samd/common-hal/pulseio/PulseIn.c
-#: ports/cxd56/common-hal/pulseio/PulseIn.c
-#: ports/nrf/common-hal/pulseio/PulseIn.c
-#: ports/stm/common-hal/pulseio/PulseIn.c py/obj.c py/objstr.c
-#: py/objstrunicode.c
+#: py/obj.c
msgid "%q index out of range"
msgstr "indice %q fuori intervallo"
#: py/obj.c
-msgid "%q indices must be integers, not %q"
-msgstr ""
+msgid "%q indices must be integers, not %s"
+msgstr "gli indici %q devono essere interi, non %s"
#: shared-bindings/vectorio/Polygon.c
msgid "%q list must be a list"
@@ -114,42 +110,6 @@ msgstr "%q() prende %d argomenti posizionali ma ne sono stati forniti %d"
msgid "'%q' argument required"
msgstr "'%q' argomento richiesto"
-#: py/runtime.c
-msgid "'%q' object cannot assign attribute '%q'"
-msgstr ""
-
-#: py/proto.c
-msgid "'%q' object does not support '%q'"
-msgstr ""
-
-#: py/obj.c
-msgid "'%q' object does not support item assignment"
-msgstr ""
-
-#: py/obj.c
-msgid "'%q' object does not support item deletion"
-msgstr ""
-
-#: py/runtime.c
-msgid "'%q' object has no attribute '%q'"
-msgstr ""
-
-#: py/runtime.c
-msgid "'%q' object is not an iterator"
-msgstr ""
-
-#: py/objtype.c py/runtime.c
-msgid "'%q' object is not callable"
-msgstr ""
-
-#: py/runtime.c
-msgid "'%q' object is not iterable"
-msgstr ""
-
-#: py/obj.c
-msgid "'%q' object is not subscriptable"
-msgstr ""
-
#: py/emitinlinethumb.c py/emitinlinextensa.c
#, c-format
msgid "'%s' expects a label"
@@ -200,6 +160,48 @@ msgstr "intero '%s' non è nell'intervallo %d..%d"
msgid "'%s' integer 0x%x does not fit in mask 0x%x"
msgstr "intero '%s' non è nell'intervallo %d..%d"
+#: py/runtime.c
+msgid "'%s' object cannot assign attribute '%q'"
+msgstr ""
+
+#: py/proto.c
+msgid "'%s' object does not support '%q'"
+msgstr ""
+
+#: py/obj.c
+#, c-format
+msgid "'%s' object does not support item assignment"
+msgstr "oggeto '%s' non supporta assengnamento di item"
+
+#: py/obj.c
+#, c-format
+msgid "'%s' object does not support item deletion"
+msgstr "oggeto '%s' non supporta eliminamento di item"
+
+#: py/runtime.c
+msgid "'%s' object has no attribute '%q'"
+msgstr "l'oggetto '%s' non ha l'attributo '%q'"
+
+#: py/runtime.c
+#, c-format
+msgid "'%s' object is not an iterator"
+msgstr "l'oggetto '%s' non è un iteratore"
+
+#: py/objtype.c py/runtime.c
+#, c-format
+msgid "'%s' object is not callable"
+msgstr "oggeto '%s' non è chiamabile"
+
+#: py/runtime.c
+#, c-format
+msgid "'%s' object is not iterable"
+msgstr "l'oggetto '%s' non è iterabile"
+
+#: py/obj.c
+#, c-format
+msgid "'%s' object is not subscriptable"
+msgstr "oggeto '%s' non è "
+
#: py/objstr.c
msgid "'=' alignment not allowed in string format specifier"
msgstr "aligniamento '=' non è permesso per il specificatore formato string"
@@ -871,10 +873,6 @@ msgstr "operazione I/O su file chiuso"
msgid "I2C Init Error"
msgstr ""
-#: shared-bindings/audiobusio/I2SOut.c
-msgid "I2SOut not available"
-msgstr ""
-
#: shared-bindings/aesio/aes.c
#, c-format
msgid "IV must be %d bytes long"
@@ -1252,10 +1250,6 @@ msgstr "Impossible connettersi all'AP"
msgid "Not playing"
msgstr "In pausa"
-#: main.c
-msgid "Not running saved code.\n"
-msgstr ""
-
#: shared-bindings/util.c
msgid ""
"Object has been deinitialized and can no longer be used. Create a new object."
@@ -1350,6 +1344,10 @@ msgstr "Imposssibile rimontare il filesystem"
msgid "Polygon needs at least 3 points"
msgstr ""
+#: shared-bindings/ps2io/Ps2.c
+msgid "Pop from an empty Ps2 buffer"
+msgstr ""
+
#: shared-bindings/_bleio/Adapter.c
msgid "Prefix buffer must be on the heap"
msgstr ""
@@ -1424,8 +1422,12 @@ msgid "Row entry must be digitalio.DigitalInOut"
msgstr ""
#: main.c
-msgid "Running in safe mode! "
-msgstr ""
+msgid "Running in safe mode! Auto-reload is off.\n"
+msgstr "Modalità sicura in esecuzione! Auto-reload disattivato.\n"
+
+#: main.c
+msgid "Running in safe mode! Not running saved code.\n"
+msgstr "Modalità sicura in esecuzione! Codice salvato non in esecuzione.\n"
#: shared-module/sdcardio/SDCard.c
msgid "SD card CSD format not supported"
@@ -1789,8 +1791,9 @@ msgid "__init__() should return None"
msgstr "__init__() deve ritornare None"
#: py/objtype.c
-msgid "__init__() should return None, not '%q'"
-msgstr ""
+#, c-format
+msgid "__init__() should return None, not '%s'"
+msgstr "__init__() deve ritornare None, non '%s'"
#: py/objobject.c
msgid "__new__ arg must be a user-type"
@@ -1946,7 +1949,7 @@ msgstr "byte > 8 bit non supportati"
msgid "bytes value out of range"
msgstr "valore byte fuori intervallo"
-#: ports/atmel-samd/bindings/samd/Clock.c ports/atmel-samd/common-hal/rtc/RTC.c
+#: ports/atmel-samd/bindings/samd/Clock.c
msgid "calibration is out of range"
msgstr "la calibrazione è fuori intervallo"
@@ -1979,17 +1982,48 @@ msgstr ""
msgid "can't assign to expression"
msgstr "impossibile assegnare all'espressione"
-#: py/obj.c py/objint.c shared-bindings/i2cperipheral/I2CPeripheral.c
-msgid "can't convert %q to %q"
-msgstr ""
+#: py/obj.c
+#, fuzzy, c-format
+msgid "can't convert %s to complex"
+msgstr "non è possibile convertire a complex"
+
+#: py/obj.c
+#, c-format
+msgid "can't convert %s to float"
+msgstr "non è possibile convertire %s a float"
+
+#: py/obj.c
+#, c-format
+msgid "can't convert %s to int"
+msgstr "non è possibile convertire %s a int"
#: py/objstr.c
msgid "can't convert '%q' object to %q implicitly"
msgstr "impossibile convertire l'oggetto '%q' implicitamente in %q"
+#: py/objint.c
+msgid "can't convert NaN to int"
+msgstr "impossibile convertire NaN in int"
+
+#: shared-bindings/i2cperipheral/I2CPeripheral.c
+msgid "can't convert address to int"
+msgstr "impossible convertire indirizzo in int"
+
+#: py/objint.c
+msgid "can't convert inf to int"
+msgstr "impossibile convertire inf in int"
+
#: py/obj.c
-msgid "can't convert to %q"
-msgstr ""
+msgid "can't convert to complex"
+msgstr "non è possibile convertire a complex"
+
+#: py/obj.c
+msgid "can't convert to float"
+msgstr "non è possibile convertire a float"
+
+#: py/obj.c
+msgid "can't convert to int"
+msgstr "non è possibile convertire a int"
#: py/objstr.c
msgid "can't convert to str implicitly"
@@ -2402,7 +2436,7 @@ msgstr "argomento nominato '%q' mancante alla funzione"
msgid "function missing required positional argument #%d"
msgstr "mancante il #%d argomento posizonale obbligatorio della funzione"
-#: py/argcheck.c py/bc.c py/objnamedtuple.c shared-bindings/time/__init__.c
+#: py/argcheck.c py/bc.c py/objnamedtuple.c
#, c-format
msgid "function takes %d positional arguments but %d were given"
msgstr ""
@@ -2452,7 +2486,10 @@ msgstr "padding incorretto"
msgid "index is out of bounds"
msgstr ""
-#: py/obj.c
+#: ports/atmel-samd/common-hal/pulseio/PulseIn.c
+#: ports/cxd56/common-hal/pulseio/PulseIn.c
+#: ports/nrf/common-hal/pulseio/PulseIn.c
+#: ports/stm/common-hal/pulseio/PulseIn.c py/obj.c
msgid "index out of range"
msgstr "indice fuori intervallo"
@@ -2816,8 +2853,9 @@ msgid "number of points must be at least 2"
msgstr ""
#: py/obj.c
-msgid "object '%q' is not a tuple or list"
-msgstr ""
+#, c-format
+msgid "object '%s' is not a tuple or list"
+msgstr "oggetto '%s' non è una tupla o una lista"
#: py/obj.c
msgid "object does not support item assignment"
@@ -2852,8 +2890,9 @@ msgid "object not iterable"
msgstr "oggetto non iterabile"
#: py/obj.c
-msgid "object of type '%q' has no len()"
-msgstr ""
+#, c-format
+msgid "object of type '%s' has no len()"
+msgstr "l'oggetto di tipo '%s' non implementa len()"
#: py/obj.c
msgid "object with buffer protocol required"
@@ -2949,10 +2988,21 @@ msgstr ""
#: ports/atmel-samd/common-hal/pulseio/PulseIn.c
#: ports/cxd56/common-hal/pulseio/PulseIn.c
#: ports/nrf/common-hal/pulseio/PulseIn.c
-#: ports/stm/common-hal/pulseio/PulseIn.c py/objdict.c py/objlist.c py/objset.c
-#: shared-bindings/ps2io/Ps2.c
-msgid "pop from empty %q"
-msgstr ""
+#: ports/stm/common-hal/pulseio/PulseIn.c
+msgid "pop from an empty PulseIn"
+msgstr "pop sun un PulseIn vuoto"
+
+#: py/objset.c
+msgid "pop from an empty set"
+msgstr "pop da un set vuoto"
+
+#: py/objlist.c
+msgid "pop from empty list"
+msgstr "pop da una lista vuota"
+
+#: py/objdict.c
+msgid "popitem(): dictionary is empty"
+msgstr "popitem(): il dizionario è vuoto"
#: py/objint_mpz.c
msgid "pow() 3rd argument cannot be 0"
@@ -3111,8 +3161,13 @@ msgid "stream operation not supported"
msgstr "operazione di stream non supportata"
#: py/objstrunicode.c
-msgid "string indices must be integers, not %q"
-msgstr ""
+msgid "string index out of range"
+msgstr "indice della stringa fuori intervallo"
+
+#: py/objstrunicode.c
+#, c-format
+msgid "string indices must be integers, not %s"
+msgstr "indici della stringa devono essere interi, non %s"
#: py/stream.c
msgid "string not supported; use bytes or bytearray"
@@ -3123,6 +3178,10 @@ msgid "struct: cannot index"
msgstr "struct: impossibile indicizzare"
#: extmod/moductypes.c
+msgid "struct: index out of range"
+msgstr "struct: indice fuori intervallo"
+
+#: extmod/moductypes.c
msgid "struct: no fields"
msgstr "struct: nessun campo"
@@ -3192,7 +3251,7 @@ msgstr "troppi valori da scompattare (%d attesi)"
msgid "trapz is defined for 1D arrays of equal length"
msgstr ""
-#: extmod/ulab/code/linalg/linalg.c
+#: extmod/ulab/code/linalg/linalg.c py/objstr.c
msgid "tuple index out of range"
msgstr "indice della tupla fuori intervallo"
@@ -3259,8 +3318,9 @@ msgid "unknown conversion specifier %c"
msgstr "specificatore di conversione %s sconosciuto"
#: py/objstr.c
-msgid "unknown format code '%c' for object of type '%q'"
-msgstr ""
+#, c-format
+msgid "unknown format code '%c' for object of type '%s'"
+msgstr "codice di formattaione '%c' sconosciuto per oggetto di tipo '%s'"
#: py/compile.c
msgid "unknown type"
@@ -3299,16 +3359,16 @@ msgid "unsupported format character '%c' (0x%x) at index %d"
msgstr "carattere di formattazione '%c' (0x%x) non supportato all indice %d"
#: py/runtime.c
-msgid "unsupported type for %q: '%q'"
-msgstr ""
+msgid "unsupported type for %q: '%s'"
+msgstr "tipo non supportato per %q: '%s'"
#: py/runtime.c
msgid "unsupported type for operator"
msgstr "tipo non supportato per l'operando"
#: py/runtime.c
-msgid "unsupported types for %q: '%q', '%q'"
-msgstr ""
+msgid "unsupported types for %q: '%s', '%s'"
+msgstr "tipi non supportati per %q: '%s', '%s'"
#: py/objint.c
#, c-format
@@ -3389,103 +3449,6 @@ msgstr ""
msgid "zi must be of shape (n_section, 2)"
msgstr ""
-#~ msgid "%q indices must be integers, not %s"
-#~ msgstr "gli indici %q devono essere interi, non %s"
-
-#~ msgid "'%s' object does not support item assignment"
-#~ msgstr "oggeto '%s' non supporta assengnamento di item"
-
-#~ msgid "'%s' object does not support item deletion"
-#~ msgstr "oggeto '%s' non supporta eliminamento di item"
-
-#~ msgid "'%s' object has no attribute '%q'"
-#~ msgstr "l'oggetto '%s' non ha l'attributo '%q'"
-
-#~ msgid "'%s' object is not an iterator"
-#~ msgstr "l'oggetto '%s' non è un iteratore"
-
-#~ msgid "'%s' object is not callable"
-#~ msgstr "oggeto '%s' non è chiamabile"
-
-#~ msgid "'%s' object is not iterable"
-#~ msgstr "l'oggetto '%s' non è iterabile"
-
-#~ msgid "'%s' object is not subscriptable"
-#~ msgstr "oggeto '%s' non è "
-
-#~ msgid "Running in safe mode! Auto-reload is off.\n"
-#~ msgstr "Modalità sicura in esecuzione! Auto-reload disattivato.\n"
-
-#~ msgid "Running in safe mode! Not running saved code.\n"
-#~ msgstr "Modalità sicura in esecuzione! Codice salvato non in esecuzione.\n"
-
-#~ msgid "__init__() should return None, not '%s'"
-#~ msgstr "__init__() deve ritornare None, non '%s'"
-
-#, fuzzy
-#~ msgid "can't convert %s to complex"
-#~ msgstr "non è possibile convertire a complex"
-
-#~ msgid "can't convert %s to float"
-#~ msgstr "non è possibile convertire %s a float"
-
-#~ msgid "can't convert %s to int"
-#~ msgstr "non è possibile convertire %s a int"
-
-#~ msgid "can't convert NaN to int"
-#~ msgstr "impossibile convertire NaN in int"
-
-#~ msgid "can't convert address to int"
-#~ msgstr "impossible convertire indirizzo in int"
-
-#~ msgid "can't convert inf to int"
-#~ msgstr "impossibile convertire inf in int"
-
-#~ msgid "can't convert to complex"
-#~ msgstr "non è possibile convertire a complex"
-
-#~ msgid "can't convert to float"
-#~ msgstr "non è possibile convertire a float"
-
-#~ msgid "can't convert to int"
-#~ msgstr "non è possibile convertire a int"
-
-#~ msgid "object '%s' is not a tuple or list"
-#~ msgstr "oggetto '%s' non è una tupla o una lista"
-
-#~ msgid "object of type '%s' has no len()"
-#~ msgstr "l'oggetto di tipo '%s' non implementa len()"
-
-#~ msgid "pop from an empty PulseIn"
-#~ msgstr "pop sun un PulseIn vuoto"
-
-#~ msgid "pop from an empty set"
-#~ msgstr "pop da un set vuoto"
-
-#~ msgid "pop from empty list"
-#~ msgstr "pop da una lista vuota"
-
-#~ msgid "popitem(): dictionary is empty"
-#~ msgstr "popitem(): il dizionario è vuoto"
-
-#~ msgid "string index out of range"
-#~ msgstr "indice della stringa fuori intervallo"
-
-#~ msgid "string indices must be integers, not %s"
-#~ msgstr "indici della stringa devono essere interi, non %s"
-
-#~ msgid "struct: index out of range"
-#~ msgstr "struct: indice fuori intervallo"
-
-#~ msgid "unknown format code '%c' for object of type '%s'"
-#~ msgstr "codice di formattaione '%c' sconosciuto per oggetto di tipo '%s'"
-
-#~ msgid "unsupported type for %q: '%s'"
-#~ msgstr "tipo non supportato per %q: '%s'"
-
-#~ msgid "unsupported types for %q: '%s', '%s'"
-#~ msgstr "tipi non supportati per %q: '%s', '%s'"
-
#~ msgid "AP required"
#~ msgstr "AP richiesto"
diff --git a/locale/ko.po b/locale/ko.po
index 6884b97fd..51a523786 100644
--- a/locale/ko.po
+++ b/locale/ko.po
@@ -6,7 +6,7 @@ msgid ""
msgstr ""
"Project-Id-Version: PACKAGE VERSION\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2020-08-04 18:42-0500\n"
+"POT-Creation-Date: 2020-07-28 16:57-0500\n"
"PO-Revision-Date: 2019-05-06 14:22-0700\n"
"Last-Translator: \n"
"Language-Team: LANGUAGE <LL@li.org>\n"
@@ -66,17 +66,13 @@ msgstr ""
msgid "%q in use"
msgstr "%q 사용 중입니다"
-#: extmod/moductypes.c ports/atmel-samd/common-hal/pulseio/PulseIn.c
-#: ports/cxd56/common-hal/pulseio/PulseIn.c
-#: ports/nrf/common-hal/pulseio/PulseIn.c
-#: ports/stm/common-hal/pulseio/PulseIn.c py/obj.c py/objstr.c
-#: py/objstrunicode.c
+#: py/obj.c
msgid "%q index out of range"
msgstr "%q 인덱스 범위를 벗어났습니다"
#: py/obj.c
-msgid "%q indices must be integers, not %q"
-msgstr ""
+msgid "%q indices must be integers, not %s"
+msgstr "%q 인덱스는 %s 가 아닌 정수 여야합니다"
#: shared-bindings/vectorio/Polygon.c
msgid "%q list must be a list"
@@ -114,42 +110,6 @@ msgstr ""
msgid "'%q' argument required"
msgstr ""
-#: py/runtime.c
-msgid "'%q' object cannot assign attribute '%q'"
-msgstr ""
-
-#: py/proto.c
-msgid "'%q' object does not support '%q'"
-msgstr ""
-
-#: py/obj.c
-msgid "'%q' object does not support item assignment"
-msgstr ""
-
-#: py/obj.c
-msgid "'%q' object does not support item deletion"
-msgstr ""
-
-#: py/runtime.c
-msgid "'%q' object has no attribute '%q'"
-msgstr ""
-
-#: py/runtime.c
-msgid "'%q' object is not an iterator"
-msgstr ""
-
-#: py/objtype.c py/runtime.c
-msgid "'%q' object is not callable"
-msgstr ""
-
-#: py/runtime.c
-msgid "'%q' object is not iterable"
-msgstr ""
-
-#: py/obj.c
-msgid "'%q' object is not subscriptable"
-msgstr ""
-
#: py/emitinlinethumb.c py/emitinlinextensa.c
#, c-format
msgid "'%s' expects a label"
@@ -200,6 +160,48 @@ msgstr ""
msgid "'%s' integer 0x%x does not fit in mask 0x%x"
msgstr ""
+#: py/runtime.c
+msgid "'%s' object cannot assign attribute '%q'"
+msgstr ""
+
+#: py/proto.c
+msgid "'%s' object does not support '%q'"
+msgstr ""
+
+#: py/obj.c
+#, c-format
+msgid "'%s' object does not support item assignment"
+msgstr "'%s' 을 지정할 수 없습니다"
+
+#: py/obj.c
+#, c-format
+msgid "'%s' object does not support item deletion"
+msgstr "'%s' 은 삭제할 수 없습니다"
+
+#: py/runtime.c
+msgid "'%s' object has no attribute '%q'"
+msgstr ""
+
+#: py/runtime.c
+#, c-format
+msgid "'%s' object is not an iterator"
+msgstr "'%s' 은 수정할 수 없습니다"
+
+#: py/objtype.c py/runtime.c
+#, c-format
+msgid "'%s' object is not callable"
+msgstr "'%s' 을 검색 할 수 없습니다"
+
+#: py/runtime.c
+#, c-format
+msgid "'%s' object is not iterable"
+msgstr "'%s' 은 변경할 수 없습니다"
+
+#: py/obj.c
+#, c-format
+msgid "'%s' object is not subscriptable"
+msgstr ""
+
#: py/objstr.c
msgid "'=' alignment not allowed in string format specifier"
msgstr ""
@@ -861,10 +863,6 @@ msgstr ""
msgid "I2C Init Error"
msgstr ""
-#: shared-bindings/audiobusio/I2SOut.c
-msgid "I2SOut not available"
-msgstr ""
-
#: shared-bindings/aesio/aes.c
#, c-format
msgid "IV must be %d bytes long"
@@ -1235,10 +1233,6 @@ msgstr ""
msgid "Not playing"
msgstr ""
-#: main.c
-msgid "Not running saved code.\n"
-msgstr ""
-
#: shared-bindings/util.c
msgid ""
"Object has been deinitialized and can no longer be used. Create a new object."
@@ -1324,6 +1318,10 @@ msgstr ""
msgid "Polygon needs at least 3 points"
msgstr ""
+#: shared-bindings/ps2io/Ps2.c
+msgid "Pop from an empty Ps2 buffer"
+msgstr ""
+
#: shared-bindings/_bleio/Adapter.c
msgid "Prefix buffer must be on the heap"
msgstr ""
@@ -1396,7 +1394,11 @@ msgid "Row entry must be digitalio.DigitalInOut"
msgstr ""
#: main.c
-msgid "Running in safe mode! "
+msgid "Running in safe mode! Auto-reload is off.\n"
+msgstr ""
+
+#: main.c
+msgid "Running in safe mode! Not running saved code.\n"
msgstr ""
#: shared-module/sdcardio/SDCard.c
@@ -1758,7 +1760,8 @@ msgid "__init__() should return None"
msgstr ""
#: py/objtype.c
-msgid "__init__() should return None, not '%q'"
+#, c-format
+msgid "__init__() should return None, not '%s'"
msgstr ""
#: py/objobject.c
@@ -1912,7 +1915,7 @@ msgstr ""
msgid "bytes value out of range"
msgstr ""
-#: ports/atmel-samd/bindings/samd/Clock.c ports/atmel-samd/common-hal/rtc/RTC.c
+#: ports/atmel-samd/bindings/samd/Clock.c
msgid "calibration is out of range"
msgstr ""
@@ -1944,16 +1947,47 @@ msgstr ""
msgid "can't assign to expression"
msgstr ""
-#: py/obj.c py/objint.c shared-bindings/i2cperipheral/I2CPeripheral.c
-msgid "can't convert %q to %q"
+#: py/obj.c
+#, c-format
+msgid "can't convert %s to complex"
+msgstr ""
+
+#: py/obj.c
+#, c-format
+msgid "can't convert %s to float"
+msgstr ""
+
+#: py/obj.c
+#, c-format
+msgid "can't convert %s to int"
msgstr ""
#: py/objstr.c
msgid "can't convert '%q' object to %q implicitly"
msgstr ""
+#: py/objint.c
+msgid "can't convert NaN to int"
+msgstr ""
+
+#: shared-bindings/i2cperipheral/I2CPeripheral.c
+msgid "can't convert address to int"
+msgstr ""
+
+#: py/objint.c
+msgid "can't convert inf to int"
+msgstr ""
+
+#: py/obj.c
+msgid "can't convert to complex"
+msgstr ""
+
+#: py/obj.c
+msgid "can't convert to float"
+msgstr ""
+
#: py/obj.c
-msgid "can't convert to %q"
+msgid "can't convert to int"
msgstr ""
#: py/objstr.c
@@ -2361,7 +2395,7 @@ msgstr ""
msgid "function missing required positional argument #%d"
msgstr ""
-#: py/argcheck.c py/bc.c py/objnamedtuple.c shared-bindings/time/__init__.c
+#: py/argcheck.c py/bc.c py/objnamedtuple.c
#, c-format
msgid "function takes %d positional arguments but %d were given"
msgstr ""
@@ -2410,7 +2444,10 @@ msgstr ""
msgid "index is out of bounds"
msgstr ""
-#: py/obj.c
+#: ports/atmel-samd/common-hal/pulseio/PulseIn.c
+#: ports/cxd56/common-hal/pulseio/PulseIn.c
+#: ports/nrf/common-hal/pulseio/PulseIn.c
+#: ports/stm/common-hal/pulseio/PulseIn.c py/obj.c
msgid "index out of range"
msgstr ""
@@ -2766,7 +2803,8 @@ msgid "number of points must be at least 2"
msgstr ""
#: py/obj.c
-msgid "object '%q' is not a tuple or list"
+#, c-format
+msgid "object '%s' is not a tuple or list"
msgstr ""
#: py/obj.c
@@ -2802,7 +2840,8 @@ msgid "object not iterable"
msgstr ""
#: py/obj.c
-msgid "object of type '%q' has no len()"
+#, c-format
+msgid "object of type '%s' has no len()"
msgstr ""
#: py/obj.c
@@ -2895,9 +2934,20 @@ msgstr ""
#: ports/atmel-samd/common-hal/pulseio/PulseIn.c
#: ports/cxd56/common-hal/pulseio/PulseIn.c
#: ports/nrf/common-hal/pulseio/PulseIn.c
-#: ports/stm/common-hal/pulseio/PulseIn.c py/objdict.c py/objlist.c py/objset.c
-#: shared-bindings/ps2io/Ps2.c
-msgid "pop from empty %q"
+#: ports/stm/common-hal/pulseio/PulseIn.c
+msgid "pop from an empty PulseIn"
+msgstr ""
+
+#: py/objset.c
+msgid "pop from an empty set"
+msgstr ""
+
+#: py/objlist.c
+msgid "pop from empty list"
+msgstr ""
+
+#: py/objdict.c
+msgid "popitem(): dictionary is empty"
msgstr ""
#: py/objint_mpz.c
@@ -3054,7 +3104,12 @@ msgid "stream operation not supported"
msgstr ""
#: py/objstrunicode.c
-msgid "string indices must be integers, not %q"
+msgid "string index out of range"
+msgstr ""
+
+#: py/objstrunicode.c
+#, c-format
+msgid "string indices must be integers, not %s"
msgstr ""
#: py/stream.c
@@ -3066,6 +3121,10 @@ msgid "struct: cannot index"
msgstr ""
#: extmod/moductypes.c
+msgid "struct: index out of range"
+msgstr ""
+
+#: extmod/moductypes.c
msgid "struct: no fields"
msgstr ""
@@ -3134,7 +3193,7 @@ msgstr ""
msgid "trapz is defined for 1D arrays of equal length"
msgstr ""
-#: extmod/ulab/code/linalg/linalg.c
+#: extmod/ulab/code/linalg/linalg.c py/objstr.c
msgid "tuple index out of range"
msgstr ""
@@ -3201,7 +3260,8 @@ msgid "unknown conversion specifier %c"
msgstr ""
#: py/objstr.c
-msgid "unknown format code '%c' for object of type '%q'"
+#, c-format
+msgid "unknown format code '%c' for object of type '%s'"
msgstr ""
#: py/compile.c
@@ -3241,7 +3301,7 @@ msgid "unsupported format character '%c' (0x%x) at index %d"
msgstr ""
#: py/runtime.c
-msgid "unsupported type for %q: '%q'"
+msgid "unsupported type for %q: '%s'"
msgstr ""
#: py/runtime.c
@@ -3249,7 +3309,7 @@ msgid "unsupported type for operator"
msgstr ""
#: py/runtime.c
-msgid "unsupported types for %q: '%q', '%q'"
+msgid "unsupported types for %q: '%s', '%s'"
msgstr ""
#: py/objint.c
@@ -3329,24 +3389,6 @@ msgstr ""
msgid "zi must be of shape (n_section, 2)"
msgstr ""
-#~ msgid "%q indices must be integers, not %s"
-#~ msgstr "%q 인덱스는 %s 가 아닌 정수 여야합니다"
-
-#~ msgid "'%s' object does not support item assignment"
-#~ msgstr "'%s' 을 지정할 수 없습니다"
-
-#~ msgid "'%s' object does not support item deletion"
-#~ msgstr "'%s' 은 삭제할 수 없습니다"
-
-#~ msgid "'%s' object is not an iterator"
-#~ msgstr "'%s' 은 수정할 수 없습니다"
-
-#~ msgid "'%s' object is not callable"
-#~ msgstr "'%s' 을 검색 할 수 없습니다"
-
-#~ msgid "'%s' object is not iterable"
-#~ msgstr "'%s' 은 변경할 수 없습니다"
-
#~ msgid "Can't add services in Central mode"
#~ msgstr "센트랄(중앙) 모드에서는 서비스를 추가 할 수 없습니다"
diff --git a/locale/nl.po b/locale/nl.po
index f9f0ddf89..6240fce1b 100644
--- a/locale/nl.po
+++ b/locale/nl.po
@@ -5,8 +5,8 @@ msgid ""
msgstr ""
"Project-Id-Version: PACKAGE VERSION\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2020-08-04 18:42-0500\n"
-"PO-Revision-Date: 2020-08-02 20:41+0000\n"
+"POT-Creation-Date: 2020-07-28 16:57-0500\n"
+"PO-Revision-Date: 2020-07-27 21:27+0000\n"
"Last-Translator: _fonzlate <vooralfred@gmail.com>\n"
"Language-Team: none\n"
"Language: nl\n"
@@ -72,17 +72,13 @@ msgstr "%q fout: %d"
msgid "%q in use"
msgstr "%q in gebruik"
-#: extmod/moductypes.c ports/atmel-samd/common-hal/pulseio/PulseIn.c
-#: ports/cxd56/common-hal/pulseio/PulseIn.c
-#: ports/nrf/common-hal/pulseio/PulseIn.c
-#: ports/stm/common-hal/pulseio/PulseIn.c py/obj.c py/objstr.c
-#: py/objstrunicode.c
+#: py/obj.c
msgid "%q index out of range"
msgstr "%q index buiten bereik"
#: py/obj.c
-msgid "%q indices must be integers, not %q"
-msgstr ""
+msgid "%q indices must be integers, not %s"
+msgstr "%q indexen moeten integers zijn, niet %s"
#: shared-bindings/vectorio/Polygon.c
msgid "%q list must be a list"
@@ -120,42 +116,6 @@ msgstr "%q() verwacht %d positionele argumenten maar kreeg %d"
msgid "'%q' argument required"
msgstr "'%q' argument vereist"
-#: py/runtime.c
-msgid "'%q' object cannot assign attribute '%q'"
-msgstr ""
-
-#: py/proto.c
-msgid "'%q' object does not support '%q'"
-msgstr ""
-
-#: py/obj.c
-msgid "'%q' object does not support item assignment"
-msgstr ""
-
-#: py/obj.c
-msgid "'%q' object does not support item deletion"
-msgstr ""
-
-#: py/runtime.c
-msgid "'%q' object has no attribute '%q'"
-msgstr ""
-
-#: py/runtime.c
-msgid "'%q' object is not an iterator"
-msgstr ""
-
-#: py/objtype.c py/runtime.c
-msgid "'%q' object is not callable"
-msgstr ""
-
-#: py/runtime.c
-msgid "'%q' object is not iterable"
-msgstr ""
-
-#: py/obj.c
-msgid "'%q' object is not subscriptable"
-msgstr ""
-
#: py/emitinlinethumb.c py/emitinlinextensa.c
#, c-format
msgid "'%s' expects a label"
@@ -206,6 +166,48 @@ msgstr "'%s' integer %d is niet in bereik %d..%d"
msgid "'%s' integer 0x%x does not fit in mask 0x%x"
msgstr "'%s' integer 0x%x past niet in mask 0x%x"
+#: py/runtime.c
+msgid "'%s' object cannot assign attribute '%q'"
+msgstr "'%s' object kan niet aan attribuut '%q' toewijzen"
+
+#: py/proto.c
+msgid "'%s' object does not support '%q'"
+msgstr "'%s' object ondersteunt '%q' niet"
+
+#: py/obj.c
+#, c-format
+msgid "'%s' object does not support item assignment"
+msgstr "'%s' object ondersteunt item toewijzing niet"
+
+#: py/obj.c
+#, c-format
+msgid "'%s' object does not support item deletion"
+msgstr "'%s' object ondersteunt item verwijdering niet"
+
+#: py/runtime.c
+msgid "'%s' object has no attribute '%q'"
+msgstr "'%s' object heeft geen attribuut '%q'"
+
+#: py/runtime.c
+#, c-format
+msgid "'%s' object is not an iterator"
+msgstr "'%s' object is geen iterator"
+
+#: py/objtype.c py/runtime.c
+#, c-format
+msgid "'%s' object is not callable"
+msgstr "'%s' object is niet aanroepbaar"
+
+#: py/runtime.c
+#, c-format
+msgid "'%s' object is not iterable"
+msgstr "'%s' object is niet itereerbaar"
+
+#: py/obj.c
+#, c-format
+msgid "'%s' object is not subscriptable"
+msgstr "'%s' object is niet onderschrijfbaar"
+
#: py/objstr.c
msgid "'=' alignment not allowed in string format specifier"
msgstr "'=' uitlijning niet toegestaan in string format specifier"
@@ -224,7 +226,7 @@ msgstr "'await' buiten de functie"
#: py/compile.c
msgid "'await', 'async for' or 'async with' outside async function"
-msgstr "'await', 'async for' of 'async with' buiten async functie"
+msgstr ""
#: py/compile.c
msgid "'break' outside loop"
@@ -875,10 +877,6 @@ msgstr "I/O actie op gesloten bestand"
msgid "I2C Init Error"
msgstr "I2C Init Fout"
-#: shared-bindings/audiobusio/I2SOut.c
-msgid "I2SOut not available"
-msgstr "I2SOut is niet beschikbaar"
-
#: shared-bindings/aesio/aes.c
#, c-format
msgid "IV must be %d bytes long"
@@ -1251,10 +1249,6 @@ msgstr "Niet verbonden"
msgid "Not playing"
msgstr "Wordt niet afgespeeld"
-#: main.c
-msgid "Not running saved code.\n"
-msgstr ""
-
#: shared-bindings/util.c
msgid ""
"Object has been deinitialized and can no longer be used. Create a new object."
@@ -1352,6 +1346,10 @@ msgstr "En iedere module in het bestandssysteem\n"
msgid "Polygon needs at least 3 points"
msgstr "Polygon heeft op zijn minst 3 punten nodig"
+#: shared-bindings/ps2io/Ps2.c
+msgid "Pop from an empty Ps2 buffer"
+msgstr "Pop van een lege Ps2 buffer"
+
#: shared-bindings/_bleio/Adapter.c
msgid "Prefix buffer must be on the heap"
msgstr "Prefix buffer moet op de heap zijn"
@@ -1426,8 +1424,12 @@ msgid "Row entry must be digitalio.DigitalInOut"
msgstr "Rij invoeging moet digitalio.DigitalInOut zijn"
#: main.c
-msgid "Running in safe mode! "
-msgstr ""
+msgid "Running in safe mode! Auto-reload is off.\n"
+msgstr "Draaiende in veilige modus! Auto-herlaad is uit.\n"
+
+#: main.c
+msgid "Running in safe mode! Not running saved code.\n"
+msgstr "Draaiende in veilige modus! Opgeslagen code wordt niet uitgevoerd.\n"
#: shared-module/sdcardio/SDCard.c
msgid "SD card CSD format not supported"
@@ -1808,8 +1810,9 @@ msgid "__init__() should return None"
msgstr "__init __ () zou None moeten retourneren"
#: py/objtype.c
-msgid "__init__() should return None, not '%q'"
-msgstr ""
+#, c-format
+msgid "__init__() should return None, not '%s'"
+msgstr "__init __ () zou None moeten retouneren, niet '%s'"
#: py/objobject.c
msgid "__new__ arg must be a user-type"
@@ -1854,7 +1857,7 @@ msgstr "argument heeft onjuist type"
#: extmod/ulab/code/linalg/linalg.c
msgid "argument must be ndarray"
-msgstr "argument moet ndarray zijn"
+msgstr ""
#: py/argcheck.c shared-bindings/_stage/__init__.c
#: shared-bindings/digitalio/DigitalInOut.c shared-bindings/gamepad/GamePad.c
@@ -1962,7 +1965,7 @@ msgstr "butes > 8 niet ondersteund"
msgid "bytes value out of range"
msgstr "bytes waarde buiten bereik"
-#: ports/atmel-samd/bindings/samd/Clock.c ports/atmel-samd/common-hal/rtc/RTC.c
+#: ports/atmel-samd/bindings/samd/Clock.c
msgid "calibration is out of range"
msgstr "calibration is buiten bereik"
@@ -1995,17 +1998,48 @@ msgstr ""
msgid "can't assign to expression"
msgstr "kan niet toewijzen aan expressie"
-#: py/obj.c py/objint.c shared-bindings/i2cperipheral/I2CPeripheral.c
-msgid "can't convert %q to %q"
-msgstr ""
+#: py/obj.c
+#, c-format
+msgid "can't convert %s to complex"
+msgstr "kan %s niet converteren naar een complex"
+
+#: py/obj.c
+#, c-format
+msgid "can't convert %s to float"
+msgstr "kan %s niet omzetten naar een float"
+
+#: py/obj.c
+#, c-format
+msgid "can't convert %s to int"
+msgstr "kan %s niet omzetten naar een int"
#: py/objstr.c
msgid "can't convert '%q' object to %q implicitly"
msgstr "kan '%q' object niet omzetten naar %q impliciet"
+#: py/objint.c
+msgid "can't convert NaN to int"
+msgstr "kan NaN niet omzetten naar int"
+
+#: shared-bindings/i2cperipheral/I2CPeripheral.c
+msgid "can't convert address to int"
+msgstr "kan adres niet omzetten naar int"
+
+#: py/objint.c
+msgid "can't convert inf to int"
+msgstr "kan inf niet omzetten naar int"
+
#: py/obj.c
-msgid "can't convert to %q"
-msgstr ""
+msgid "can't convert to complex"
+msgstr "kan niet omzetten naar complex"
+
+#: py/obj.c
+msgid "can't convert to float"
+msgstr "kan niet omzetten naar float"
+
+#: py/obj.c
+msgid "can't convert to int"
+msgstr "kan niet omzetten naar int"
#: py/objstr.c
msgid "can't convert to str implicitly"
@@ -2415,7 +2449,7 @@ msgstr "functie mist vereist sleutelwoord argument \"%q"
msgid "function missing required positional argument #%d"
msgstr "functie mist vereist positie-argument #%d"
-#: py/argcheck.c py/bc.c py/objnamedtuple.c shared-bindings/time/__init__.c
+#: py/argcheck.c py/bc.c py/objnamedtuple.c
#, c-format
msgid "function takes %d positional arguments but %d were given"
msgstr ""
@@ -2465,7 +2499,10 @@ msgstr "vulling (padding) is onjuist"
msgid "index is out of bounds"
msgstr "index is buiten bereik"
-#: py/obj.c
+#: ports/atmel-samd/common-hal/pulseio/PulseIn.c
+#: ports/cxd56/common-hal/pulseio/PulseIn.c
+#: ports/nrf/common-hal/pulseio/PulseIn.c
+#: ports/stm/common-hal/pulseio/PulseIn.c py/obj.c
msgid "index out of range"
msgstr "index is buiten bereik"
@@ -2527,7 +2564,7 @@ msgstr "integer vereist"
#: extmod/ulab/code/approx/approx.c
msgid "interp is defined for 1D arrays of equal length"
-msgstr "interp is gedefinieerd voor eendimensionale arrays van gelijke lengte"
+msgstr "interp is gedefinieerd for eendimensionale arrays van gelijke lengte"
#: shared-bindings/_bleio/Adapter.c
#, c-format
@@ -2824,8 +2861,9 @@ msgid "number of points must be at least 2"
msgstr "aantal punten moet minimaal 2 zijn"
#: py/obj.c
-msgid "object '%q' is not a tuple or list"
-msgstr ""
+#, c-format
+msgid "object '%s' is not a tuple or list"
+msgstr "object '%s' is geen tuple of lijst"
#: py/obj.c
msgid "object does not support item assignment"
@@ -2860,8 +2898,9 @@ msgid "object not iterable"
msgstr "object niet itereerbaar"
#: py/obj.c
-msgid "object of type '%q' has no len()"
-msgstr ""
+#, c-format
+msgid "object of type '%s' has no len()"
+msgstr "object van type '%s' heeft geen len()"
#: py/obj.c
msgid "object with buffer protocol required"
@@ -2954,10 +2993,21 @@ msgstr ""
#: ports/atmel-samd/common-hal/pulseio/PulseIn.c
#: ports/cxd56/common-hal/pulseio/PulseIn.c
#: ports/nrf/common-hal/pulseio/PulseIn.c
-#: ports/stm/common-hal/pulseio/PulseIn.c py/objdict.c py/objlist.c py/objset.c
-#: shared-bindings/ps2io/Ps2.c
-msgid "pop from empty %q"
-msgstr ""
+#: ports/stm/common-hal/pulseio/PulseIn.c
+msgid "pop from an empty PulseIn"
+msgstr "pop van een lege PulseIn"
+
+#: py/objset.c
+msgid "pop from an empty set"
+msgstr "pop van een lege set"
+
+#: py/objlist.c
+msgid "pop from empty list"
+msgstr "pop van een lege lijst"
+
+#: py/objdict.c
+msgid "popitem(): dictionary is empty"
+msgstr "popitem(): dictionary is leeg"
#: py/objint_mpz.c
msgid "pow() 3rd argument cannot be 0"
@@ -3115,8 +3165,13 @@ msgid "stream operation not supported"
msgstr "stream operatie niet ondersteund"
#: py/objstrunicode.c
-msgid "string indices must be integers, not %q"
-msgstr ""
+msgid "string index out of range"
+msgstr "string index buiten bereik"
+
+#: py/objstrunicode.c
+#, c-format
+msgid "string indices must be integers, not %s"
+msgstr "string indices moeten integer zijn, niet %s"
#: py/stream.c
msgid "string not supported; use bytes or bytearray"
@@ -3127,6 +3182,10 @@ msgid "struct: cannot index"
msgstr "struct: kan niet indexeren"
#: extmod/moductypes.c
+msgid "struct: index out of range"
+msgstr "struct: index buiten bereik"
+
+#: extmod/moductypes.c
msgid "struct: no fields"
msgstr "struct: geen velden"
@@ -3193,9 +3252,9 @@ msgstr "te veel waarden om uit te pakken (%d verwacht)"
#: extmod/ulab/code/approx/approx.c
msgid "trapz is defined for 1D arrays of equal length"
-msgstr "trapz is gedefinieerd voor eendimensionale arrays van gelijke lengte"
+msgstr ""
-#: extmod/ulab/code/linalg/linalg.c
+#: extmod/ulab/code/linalg/linalg.c py/objstr.c
msgid "tuple index out of range"
msgstr "tuple index buiten bereik"
@@ -3262,8 +3321,9 @@ msgid "unknown conversion specifier %c"
msgstr "onbekende conversiespecificatie %c"
#: py/objstr.c
-msgid "unknown format code '%c' for object of type '%q'"
-msgstr ""
+#, c-format
+msgid "unknown format code '%c' for object of type '%s'"
+msgstr "onbekende formaatcode '%c' voor object van type '%s'"
#: py/compile.c
msgid "unknown type"
@@ -3302,16 +3362,16 @@ msgid "unsupported format character '%c' (0x%x) at index %d"
msgstr "niet ondersteund formaatkarakter '%c' (0x%x) op index %d"
#: py/runtime.c
-msgid "unsupported type for %q: '%q'"
-msgstr ""
+msgid "unsupported type for %q: '%s'"
+msgstr "niet ondersteund type voor %q: '%s'"
#: py/runtime.c
msgid "unsupported type for operator"
msgstr "niet ondersteund type voor operator"
#: py/runtime.c
-msgid "unsupported types for %q: '%q', '%q'"
-msgstr ""
+msgid "unsupported types for %q: '%s', '%s'"
+msgstr "niet ondersteunde types voor %q: '%s', '%s'"
#: py/objint.c
#, c-format
@@ -3324,7 +3384,7 @@ msgstr "value_count moet groter dan 0 zijn"
#: extmod/ulab/code/linalg/linalg.c
msgid "vectors must have same lengths"
-msgstr "vectoren moeten van gelijke lengte zijn"
+msgstr ""
#: shared-bindings/watchdog/WatchDogTimer.c
msgid "watchdog timeout must be greater than 0"
@@ -3390,121 +3450,18 @@ msgstr "zi moet van type float zijn"
msgid "zi must be of shape (n_section, 2)"
msgstr "zi moet vorm (n_section, 2) hebben"
-#~ msgid "%q indices must be integers, not %s"
-#~ msgstr "%q indexen moeten integers zijn, niet %s"
-
-#~ msgid "'%s' object cannot assign attribute '%q'"
-#~ msgstr "'%s' object kan niet aan attribuut '%q' toewijzen"
-
-#~ msgid "'%s' object does not support '%q'"
-#~ msgstr "'%s' object ondersteunt '%q' niet"
-
-#~ msgid "'%s' object does not support item assignment"
-#~ msgstr "'%s' object ondersteunt item toewijzing niet"
-
-#~ msgid "'%s' object does not support item deletion"
-#~ msgstr "'%s' object ondersteunt item verwijdering niet"
-
-#~ msgid "'%s' object has no attribute '%q'"
-#~ msgstr "'%s' object heeft geen attribuut '%q'"
-
-#~ msgid "'%s' object is not an iterator"
-#~ msgstr "'%s' object is geen iterator"
-
-#~ msgid "'%s' object is not callable"
-#~ msgstr "'%s' object is niet aanroepbaar"
-
-#~ msgid "'%s' object is not iterable"
-#~ msgstr "'%s' object is niet itereerbaar"
-
-#~ msgid "'%s' object is not subscriptable"
-#~ msgstr "'%s' object is niet onderschrijfbaar"
-
-#~ msgid "Pop from an empty Ps2 buffer"
-#~ msgstr "Pop van een lege Ps2 buffer"
-
-#~ msgid "Running in safe mode! Auto-reload is off.\n"
-#~ msgstr "Draaiende in veilige modus! Auto-herlaad is uit.\n"
-
-#~ msgid "Running in safe mode! Not running saved code.\n"
-#~ msgstr ""
-#~ "Draaiende in veilige modus! Opgeslagen code wordt niet uitgevoerd.\n"
-
-#~ msgid "__init__() should return None, not '%s'"
-#~ msgstr "__init __ () zou None moeten retouneren, niet '%s'"
-
-#~ msgid "can't convert %s to complex"
-#~ msgstr "kan %s niet converteren naar een complex"
-
-#~ msgid "can't convert %s to float"
-#~ msgstr "kan %s niet omzetten naar een float"
-
-#~ msgid "can't convert %s to int"
-#~ msgstr "kan %s niet omzetten naar een int"
-
-#~ msgid "can't convert NaN to int"
-#~ msgstr "kan NaN niet omzetten naar int"
-
-#~ msgid "can't convert address to int"
-#~ msgstr "kan adres niet omzetten naar int"
-
-#~ msgid "can't convert inf to int"
-#~ msgstr "kan inf niet omzetten naar int"
-
-#~ msgid "can't convert to complex"
-#~ msgstr "kan niet omzetten naar complex"
-
-#~ msgid "can't convert to float"
-#~ msgstr "kan niet omzetten naar float"
-
-#~ msgid "can't convert to int"
-#~ msgstr "kan niet omzetten naar int"
-
-#~ msgid "object '%s' is not a tuple or list"
-#~ msgstr "object '%s' is geen tuple of lijst"
-
-#~ msgid "object of type '%s' has no len()"
-#~ msgstr "object van type '%s' heeft geen len()"
-
-#~ msgid "pop from an empty PulseIn"
-#~ msgstr "pop van een lege PulseIn"
-
-#~ msgid "pop from an empty set"
-#~ msgstr "pop van een lege set"
-
-#~ msgid "pop from empty list"
-#~ msgstr "pop van een lege lijst"
-
-#~ msgid "popitem(): dictionary is empty"
-#~ msgstr "popitem(): dictionary is leeg"
-
-#~ msgid "string index out of range"
-#~ msgstr "string index buiten bereik"
-
-#~ msgid "string indices must be integers, not %s"
-#~ msgstr "string indices moeten integer zijn, niet %s"
-
-#~ msgid "struct: index out of range"
-#~ msgstr "struct: index buiten bereik"
-
-#~ msgid "unknown format code '%c' for object of type '%s'"
-#~ msgstr "onbekende formaatcode '%c' voor object van type '%s'"
-
-#~ msgid "unsupported type for %q: '%s'"
-#~ msgstr "niet ondersteund type voor %q: '%s'"
-
-#~ msgid "unsupported types for %q: '%s', '%s'"
-#~ msgstr "niet ondersteunde types voor %q: '%s', '%s'"
+#~ msgid "'%q' object is not bytes-like"
+#~ msgstr "'%q' object is niet bytes-achtig"
#~ msgid "'async for' or 'async with' outside async function"
#~ msgstr "'async for' of 'async with' buiten async functie"
-#~ msgid "PulseIn not supported on this chip"
-#~ msgstr "PusleIn niet ondersteund door deze chip"
-
#~ msgid "PulseOut not supported on this chip"
#~ msgstr "PulseOut niet ondersteund door deze chip"
+#~ msgid "PulseIn not supported on this chip"
+#~ msgstr "PusleIn niet ondersteund door deze chip"
+
#~ msgid "I2C operation not supported"
#~ msgstr "I2C actie niet ondersteund"
diff --git a/locale/pl.po b/locale/pl.po
index 325de7b87..fdb374918 100644
--- a/locale/pl.po
+++ b/locale/pl.po
@@ -6,7 +6,7 @@ msgid ""
msgstr ""
"Project-Id-Version: \n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2020-08-04 18:42-0500\n"
+"POT-Creation-Date: 2020-07-28 16:57-0500\n"
"PO-Revision-Date: 2019-03-19 18:37-0700\n"
"Last-Translator: Radomir Dopieralski <circuitpython@sheep.art.pl>\n"
"Language-Team: pl\n"
@@ -66,17 +66,13 @@ msgstr ""
msgid "%q in use"
msgstr "%q w użyciu"
-#: extmod/moductypes.c ports/atmel-samd/common-hal/pulseio/PulseIn.c
-#: ports/cxd56/common-hal/pulseio/PulseIn.c
-#: ports/nrf/common-hal/pulseio/PulseIn.c
-#: ports/stm/common-hal/pulseio/PulseIn.c py/obj.c py/objstr.c
-#: py/objstrunicode.c
+#: py/obj.c
msgid "%q index out of range"
msgstr "%q poza zakresem"
#: py/obj.c
-msgid "%q indices must be integers, not %q"
-msgstr ""
+msgid "%q indices must be integers, not %s"
+msgstr "%q indeks musi być liczbą całkowitą, a nie %s"
#: shared-bindings/vectorio/Polygon.c
msgid "%q list must be a list"
@@ -114,42 +110,6 @@ msgstr "%q() bierze %d argumentów pozycyjnych, lecz podano %d"
msgid "'%q' argument required"
msgstr "'%q' wymaga argumentu"
-#: py/runtime.c
-msgid "'%q' object cannot assign attribute '%q'"
-msgstr ""
-
-#: py/proto.c
-msgid "'%q' object does not support '%q'"
-msgstr ""
-
-#: py/obj.c
-msgid "'%q' object does not support item assignment"
-msgstr ""
-
-#: py/obj.c
-msgid "'%q' object does not support item deletion"
-msgstr ""
-
-#: py/runtime.c
-msgid "'%q' object has no attribute '%q'"
-msgstr ""
-
-#: py/runtime.c
-msgid "'%q' object is not an iterator"
-msgstr ""
-
-#: py/objtype.c py/runtime.c
-msgid "'%q' object is not callable"
-msgstr ""
-
-#: py/runtime.c
-msgid "'%q' object is not iterable"
-msgstr ""
-
-#: py/obj.c
-msgid "'%q' object is not subscriptable"
-msgstr ""
-
#: py/emitinlinethumb.c py/emitinlinextensa.c
#, c-format
msgid "'%s' expects a label"
@@ -200,6 +160,48 @@ msgstr "'%s' liczba %d poza zakresem %d..%d"
msgid "'%s' integer 0x%x does not fit in mask 0x%x"
msgstr "'%s' liczba 0x%x nie pasuje do maski 0x%x"
+#: py/runtime.c
+msgid "'%s' object cannot assign attribute '%q'"
+msgstr ""
+
+#: py/proto.c
+msgid "'%s' object does not support '%q'"
+msgstr ""
+
+#: py/obj.c
+#, c-format
+msgid "'%s' object does not support item assignment"
+msgstr "'%s' obiekt nie wspiera przypisania do elementów"
+
+#: py/obj.c
+#, c-format
+msgid "'%s' object does not support item deletion"
+msgstr "'%s' obiekt nie wspiera usuwania elementów"
+
+#: py/runtime.c
+msgid "'%s' object has no attribute '%q'"
+msgstr "'%s' obiekt nie ma atrybutu '%q'"
+
+#: py/runtime.c
+#, c-format
+msgid "'%s' object is not an iterator"
+msgstr "'%s' obiekt nie jest iteratorem"
+
+#: py/objtype.c py/runtime.c
+#, c-format
+msgid "'%s' object is not callable"
+msgstr "'%s' nie można wywoływać obiektu"
+
+#: py/runtime.c
+#, c-format
+msgid "'%s' object is not iterable"
+msgstr "'%s' nie można iterować po obiekcie"
+
+#: py/obj.c
+#, c-format
+msgid "'%s' object is not subscriptable"
+msgstr "'%s' nie można indeksować obiektu"
+
#: py/objstr.c
msgid "'=' alignment not allowed in string format specifier"
msgstr "wyrównanie '=' niedozwolone w specyfikacji formatu"
@@ -861,10 +863,6 @@ msgstr "Operacja I/O na zamkniętym pliku"
msgid "I2C Init Error"
msgstr ""
-#: shared-bindings/audiobusio/I2SOut.c
-msgid "I2SOut not available"
-msgstr ""
-
#: shared-bindings/aesio/aes.c
#, c-format
msgid "IV must be %d bytes long"
@@ -1237,10 +1235,6 @@ msgstr "Nie podłączono"
msgid "Not playing"
msgstr "Nic nie jest odtwarzane"
-#: main.c
-msgid "Not running saved code.\n"
-msgstr ""
-
#: shared-bindings/util.c
msgid ""
"Object has been deinitialized and can no longer be used. Create a new object."
@@ -1326,6 +1320,10 @@ msgstr "Oraz moduły w systemie plików\n"
msgid "Polygon needs at least 3 points"
msgstr ""
+#: shared-bindings/ps2io/Ps2.c
+msgid "Pop from an empty Ps2 buffer"
+msgstr ""
+
#: shared-bindings/_bleio/Adapter.c
msgid "Prefix buffer must be on the heap"
msgstr ""
@@ -1398,8 +1396,12 @@ msgid "Row entry must be digitalio.DigitalInOut"
msgstr "Rzędy muszą być digitalio.DigitalInOut"
#: main.c
-msgid "Running in safe mode! "
-msgstr ""
+msgid "Running in safe mode! Auto-reload is off.\n"
+msgstr "Uruchomiony tryb bezpieczeństwa! Samo-przeładowanie wyłączone.\n"
+
+#: main.c
+msgid "Running in safe mode! Not running saved code.\n"
+msgstr "Uruchomiony tryb bezpieczeństwa! Zapisany kod nie jest uruchamiany.\n"
#: shared-module/sdcardio/SDCard.c
msgid "SD card CSD format not supported"
@@ -1762,8 +1764,9 @@ msgid "__init__() should return None"
msgstr "__init__() powinien zwracać None"
#: py/objtype.c
-msgid "__init__() should return None, not '%q'"
-msgstr ""
+#, c-format
+msgid "__init__() should return None, not '%s'"
+msgstr "__init__() powinien zwracać None, nie '%s'"
#: py/objobject.c
msgid "__new__ arg must be a user-type"
@@ -1916,7 +1919,7 @@ msgstr "bajty większe od 8 bitów są niewspierane"
msgid "bytes value out of range"
msgstr "wartość bytes poza zakresem"
-#: ports/atmel-samd/bindings/samd/Clock.c ports/atmel-samd/common-hal/rtc/RTC.c
+#: ports/atmel-samd/bindings/samd/Clock.c
msgid "calibration is out of range"
msgstr "kalibracja poza zakresem"
@@ -1948,17 +1951,48 @@ msgstr "nie można dodać specjalnej metody do podklasy"
msgid "can't assign to expression"
msgstr "przypisanie do wyrażenia"
-#: py/obj.c py/objint.c shared-bindings/i2cperipheral/I2CPeripheral.c
-msgid "can't convert %q to %q"
-msgstr ""
+#: py/obj.c
+#, c-format
+msgid "can't convert %s to complex"
+msgstr "nie można skonwertować %s do complex"
+
+#: py/obj.c
+#, c-format
+msgid "can't convert %s to float"
+msgstr "nie można skonwertować %s do float"
+
+#: py/obj.c
+#, c-format
+msgid "can't convert %s to int"
+msgstr "nie można skonwertować %s do int"
#: py/objstr.c
msgid "can't convert '%q' object to %q implicitly"
msgstr "nie można automatycznie skonwertować '%q' do '%q'"
+#: py/objint.c
+msgid "can't convert NaN to int"
+msgstr "nie można skonwertować NaN do int"
+
+#: shared-bindings/i2cperipheral/I2CPeripheral.c
+msgid "can't convert address to int"
+msgstr "nie można skonwertować adresu do int"
+
+#: py/objint.c
+msgid "can't convert inf to int"
+msgstr "nie można skonwertować inf do int"
+
#: py/obj.c
-msgid "can't convert to %q"
-msgstr ""
+msgid "can't convert to complex"
+msgstr "nie można skonwertować do complex"
+
+#: py/obj.c
+msgid "can't convert to float"
+msgstr "nie można skonwertować do float"
+
+#: py/obj.c
+msgid "can't convert to int"
+msgstr "nie można skonwertować do int"
#: py/objstr.c
msgid "can't convert to str implicitly"
@@ -2366,7 +2400,7 @@ msgstr "brak wymaganego argumentu nazwanego '%q' funkcji"
msgid "function missing required positional argument #%d"
msgstr "brak wymaganego argumentu pozycyjnego #%d funkcji"
-#: py/argcheck.c py/bc.c py/objnamedtuple.c shared-bindings/time/__init__.c
+#: py/argcheck.c py/bc.c py/objnamedtuple.c
#, c-format
msgid "function takes %d positional arguments but %d were given"
msgstr "funkcja wymaga %d argumentów pozycyjnych, ale jest %d"
@@ -2415,7 +2449,10 @@ msgstr "złe wypełnienie"
msgid "index is out of bounds"
msgstr ""
-#: py/obj.c
+#: ports/atmel-samd/common-hal/pulseio/PulseIn.c
+#: ports/cxd56/common-hal/pulseio/PulseIn.c
+#: ports/nrf/common-hal/pulseio/PulseIn.c
+#: ports/stm/common-hal/pulseio/PulseIn.c py/obj.c
msgid "index out of range"
msgstr "indeks poza zakresem"
@@ -2771,8 +2808,9 @@ msgid "number of points must be at least 2"
msgstr ""
#: py/obj.c
-msgid "object '%q' is not a tuple or list"
-msgstr ""
+#, c-format
+msgid "object '%s' is not a tuple or list"
+msgstr "obiekt '%s' nie jest krotką ani listą"
#: py/obj.c
msgid "object does not support item assignment"
@@ -2807,8 +2845,9 @@ msgid "object not iterable"
msgstr "obiekt nie jest iterowalny"
#: py/obj.c
-msgid "object of type '%q' has no len()"
-msgstr ""
+#, c-format
+msgid "object of type '%s' has no len()"
+msgstr "obiekt typu '%s' nie ma len()"
#: py/obj.c
msgid "object with buffer protocol required"
@@ -2901,10 +2940,21 @@ msgstr ""
#: ports/atmel-samd/common-hal/pulseio/PulseIn.c
#: ports/cxd56/common-hal/pulseio/PulseIn.c
#: ports/nrf/common-hal/pulseio/PulseIn.c
-#: ports/stm/common-hal/pulseio/PulseIn.c py/objdict.c py/objlist.c py/objset.c
-#: shared-bindings/ps2io/Ps2.c
-msgid "pop from empty %q"
-msgstr ""
+#: ports/stm/common-hal/pulseio/PulseIn.c
+msgid "pop from an empty PulseIn"
+msgstr "pop z pustego PulseIn"
+
+#: py/objset.c
+msgid "pop from an empty set"
+msgstr "pop z pustego zbioru"
+
+#: py/objlist.c
+msgid "pop from empty list"
+msgstr "pop z pustej listy"
+
+#: py/objdict.c
+msgid "popitem(): dictionary is empty"
+msgstr "popitem(): słownik jest pusty"
#: py/objint_mpz.c
msgid "pow() 3rd argument cannot be 0"
@@ -3061,8 +3111,13 @@ msgid "stream operation not supported"
msgstr "operacja na strumieniu nieobsługiwana"
#: py/objstrunicode.c
-msgid "string indices must be integers, not %q"
-msgstr ""
+msgid "string index out of range"
+msgstr "indeks łańcucha poza zakresem"
+
+#: py/objstrunicode.c
+#, c-format
+msgid "string indices must be integers, not %s"
+msgstr "indeksy łańcucha muszą być całkowite, nie %s"
#: py/stream.c
msgid "string not supported; use bytes or bytearray"
@@ -3073,6 +3128,10 @@ msgid "struct: cannot index"
msgstr "struct: nie można indeksować"
#: extmod/moductypes.c
+msgid "struct: index out of range"
+msgstr "struct: indeks poza zakresem"
+
+#: extmod/moductypes.c
msgid "struct: no fields"
msgstr "struct: brak pól"
@@ -3141,7 +3200,7 @@ msgstr "zbyt wiele wartości do rozpakowania (oczekiwano %d)"
msgid "trapz is defined for 1D arrays of equal length"
msgstr ""
-#: extmod/ulab/code/linalg/linalg.c
+#: extmod/ulab/code/linalg/linalg.c py/objstr.c
msgid "tuple index out of range"
msgstr "indeks krotki poza zakresem"
@@ -3208,8 +3267,9 @@ msgid "unknown conversion specifier %c"
msgstr "zła specyfikacja konwersji %c"
#: py/objstr.c
-msgid "unknown format code '%c' for object of type '%q'"
-msgstr ""
+#, c-format
+msgid "unknown format code '%c' for object of type '%s'"
+msgstr "zły kod formatowania '%c' dla obiektu typu '%s'"
#: py/compile.c
msgid "unknown type"
@@ -3248,16 +3308,16 @@ msgid "unsupported format character '%c' (0x%x) at index %d"
msgstr "zły znak formatowania '%c' (0x%x) na pozycji %d"
#: py/runtime.c
-msgid "unsupported type for %q: '%q'"
-msgstr ""
+msgid "unsupported type for %q: '%s'"
+msgstr "zły typ dla %q: '%s'"
#: py/runtime.c
msgid "unsupported type for operator"
msgstr "zły typ dla operatora"
#: py/runtime.c
-msgid "unsupported types for %q: '%q', '%q'"
-msgstr ""
+msgid "unsupported types for %q: '%s', '%s'"
+msgstr "złe typy dla %q: '%s', '%s'"
#: py/objint.c
#, c-format
@@ -3336,103 +3396,6 @@ msgstr ""
msgid "zi must be of shape (n_section, 2)"
msgstr ""
-#~ msgid "%q indices must be integers, not %s"
-#~ msgstr "%q indeks musi być liczbą całkowitą, a nie %s"
-
-#~ msgid "'%s' object does not support item assignment"
-#~ msgstr "'%s' obiekt nie wspiera przypisania do elementów"
-
-#~ msgid "'%s' object does not support item deletion"
-#~ msgstr "'%s' obiekt nie wspiera usuwania elementów"
-
-#~ msgid "'%s' object has no attribute '%q'"
-#~ msgstr "'%s' obiekt nie ma atrybutu '%q'"
-
-#~ msgid "'%s' object is not an iterator"
-#~ msgstr "'%s' obiekt nie jest iteratorem"
-
-#~ msgid "'%s' object is not callable"
-#~ msgstr "'%s' nie można wywoływać obiektu"
-
-#~ msgid "'%s' object is not iterable"
-#~ msgstr "'%s' nie można iterować po obiekcie"
-
-#~ msgid "'%s' object is not subscriptable"
-#~ msgstr "'%s' nie można indeksować obiektu"
-
-#~ msgid "Running in safe mode! Auto-reload is off.\n"
-#~ msgstr "Uruchomiony tryb bezpieczeństwa! Samo-przeładowanie wyłączone.\n"
-
-#~ msgid "Running in safe mode! Not running saved code.\n"
-#~ msgstr ""
-#~ "Uruchomiony tryb bezpieczeństwa! Zapisany kod nie jest uruchamiany.\n"
-
-#~ msgid "__init__() should return None, not '%s'"
-#~ msgstr "__init__() powinien zwracać None, nie '%s'"
-
-#~ msgid "can't convert %s to complex"
-#~ msgstr "nie można skonwertować %s do complex"
-
-#~ msgid "can't convert %s to float"
-#~ msgstr "nie można skonwertować %s do float"
-
-#~ msgid "can't convert %s to int"
-#~ msgstr "nie można skonwertować %s do int"
-
-#~ msgid "can't convert NaN to int"
-#~ msgstr "nie można skonwertować NaN do int"
-
-#~ msgid "can't convert address to int"
-#~ msgstr "nie można skonwertować adresu do int"
-
-#~ msgid "can't convert inf to int"
-#~ msgstr "nie można skonwertować inf do int"
-
-#~ msgid "can't convert to complex"
-#~ msgstr "nie można skonwertować do complex"
-
-#~ msgid "can't convert to float"
-#~ msgstr "nie można skonwertować do float"
-
-#~ msgid "can't convert to int"
-#~ msgstr "nie można skonwertować do int"
-
-#~ msgid "object '%s' is not a tuple or list"
-#~ msgstr "obiekt '%s' nie jest krotką ani listą"
-
-#~ msgid "object of type '%s' has no len()"
-#~ msgstr "obiekt typu '%s' nie ma len()"
-
-#~ msgid "pop from an empty PulseIn"
-#~ msgstr "pop z pustego PulseIn"
-
-#~ msgid "pop from an empty set"
-#~ msgstr "pop z pustego zbioru"
-
-#~ msgid "pop from empty list"
-#~ msgstr "pop z pustej listy"
-
-#~ msgid "popitem(): dictionary is empty"
-#~ msgstr "popitem(): słownik jest pusty"
-
-#~ msgid "string index out of range"
-#~ msgstr "indeks łańcucha poza zakresem"
-
-#~ msgid "string indices must be integers, not %s"
-#~ msgstr "indeksy łańcucha muszą być całkowite, nie %s"
-
-#~ msgid "struct: index out of range"
-#~ msgstr "struct: indeks poza zakresem"
-
-#~ msgid "unknown format code '%c' for object of type '%s'"
-#~ msgstr "zły kod formatowania '%c' dla obiektu typu '%s'"
-
-#~ msgid "unsupported type for %q: '%s'"
-#~ msgstr "zły typ dla %q: '%s'"
-
-#~ msgid "unsupported types for %q: '%s', '%s'"
-#~ msgstr "złe typy dla %q: '%s', '%s'"
-
#~ msgid "Address is not %d bytes long or is in wrong format"
#~ msgstr "Adres nie ma długości %d bajtów lub zły format"
diff --git a/locale/pt_BR.po b/locale/pt_BR.po
index 02d4a5d89..3ecca12df 100644
--- a/locale/pt_BR.po
+++ b/locale/pt_BR.po
@@ -5,8 +5,8 @@ msgid ""
msgstr ""
"Project-Id-Version: PACKAGE VERSION\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2020-08-04 18:42-0500\n"
-"PO-Revision-Date: 2020-08-09 11:32+0000\n"
+"POT-Creation-Date: 2020-07-28 16:57-0500\n"
+"PO-Revision-Date: 2020-07-28 15:41+0000\n"
"Last-Translator: Wellington Terumi Uemura <wellingtonuemura@gmail.com>\n"
"Language-Team: \n"
"Language: pt_BR\n"
@@ -72,17 +72,13 @@ msgstr "%q falha: %d"
msgid "%q in use"
msgstr "%q em uso"
-#: extmod/moductypes.c ports/atmel-samd/common-hal/pulseio/PulseIn.c
-#: ports/cxd56/common-hal/pulseio/PulseIn.c
-#: ports/nrf/common-hal/pulseio/PulseIn.c
-#: ports/stm/common-hal/pulseio/PulseIn.c py/obj.c py/objstr.c
-#: py/objstrunicode.c
+#: py/obj.c
msgid "%q index out of range"
msgstr "O índice %q está fora do intervalo"
#: py/obj.c
-msgid "%q indices must be integers, not %q"
-msgstr "Os indicadores %q devem ser inteiros, não %q"
+msgid "%q indices must be integers, not %s"
+msgstr "Os índices %q devem ser inteiros, e não %s"
#: shared-bindings/vectorio/Polygon.c
msgid "%q list must be a list"
@@ -120,42 +116,6 @@ msgstr "%q() recebe %d argumentos posicionais, porém %d foram informados"
msgid "'%q' argument required"
msgstr "'%q' argumento(s) requerido(s)"
-#: py/runtime.c
-msgid "'%q' object cannot assign attribute '%q'"
-msgstr "O objeto '%q' não pode definir o atributo '%q'"
-
-#: py/proto.c
-msgid "'%q' object does not support '%q'"
-msgstr "O objeto '%q' não suporta '%q'"
-
-#: py/obj.c
-msgid "'%q' object does not support item assignment"
-msgstr "O objeto '%q' não suporta a atribuição do item"
-
-#: py/obj.c
-msgid "'%q' object does not support item deletion"
-msgstr "O objeto '%q' não suporta exclusão dos itens"
-
-#: py/runtime.c
-msgid "'%q' object has no attribute '%q'"
-msgstr "Objeto '%q' não possui qualquer atributo '%q'"
-
-#: py/runtime.c
-msgid "'%q' object is not an iterator"
-msgstr "O objeto '%q' não é um iterador"
-
-#: py/objtype.c py/runtime.c
-msgid "'%q' object is not callable"
-msgstr "O objeto '%s' não é invocável"
-
-#: py/runtime.c
-msgid "'%q' object is not iterable"
-msgstr "O objeto '%q' não é iterável"
-
-#: py/obj.c
-msgid "'%q' object is not subscriptable"
-msgstr "O objeto '%q' não é subscritível"
-
#: py/emitinlinethumb.c py/emitinlinextensa.c
#, c-format
msgid "'%s' expects a label"
@@ -206,6 +166,48 @@ msgstr "O número inteiro '%s' %d não está dentro do intervalo %d..%d"
msgid "'%s' integer 0x%x does not fit in mask 0x%x"
msgstr "O número inteiro '%s' 0x%x não cabe na máscara 0x%x"
+#: py/runtime.c
+msgid "'%s' object cannot assign attribute '%q'"
+msgstr "O objeto '%s' não pode definir o atributo '%q'"
+
+#: py/proto.c
+msgid "'%s' object does not support '%q'"
+msgstr "O objeto '%s' não é compatível com '%q'"
+
+#: py/obj.c
+#, c-format
+msgid "'%s' object does not support item assignment"
+msgstr "O objeto '%s' não compatível com a atribuição dos itens"
+
+#: py/obj.c
+#, c-format
+msgid "'%s' object does not support item deletion"
+msgstr "O objeto '%s' não é compatível com exclusão do item"
+
+#: py/runtime.c
+msgid "'%s' object has no attribute '%q'"
+msgstr "O objeto '%s' não possui o atributo '%q'"
+
+#: py/runtime.c
+#, c-format
+msgid "'%s' object is not an iterator"
+msgstr "O objeto '%s' não é um iterador"
+
+#: py/objtype.c py/runtime.c
+#, c-format
+msgid "'%s' object is not callable"
+msgstr "O objeto '%s' não é invocável"
+
+#: py/runtime.c
+#, c-format
+msgid "'%s' object is not iterable"
+msgstr "O objeto '%s' não é iterável"
+
+#: py/obj.c
+#, c-format
+msgid "'%s' object is not subscriptable"
+msgstr "O objeto '%s' não é subroteirizável"
+
#: py/objstr.c
msgid "'=' alignment not allowed in string format specifier"
msgstr ""
@@ -884,10 +886,6 @@ msgstr "Operação I/O no arquivo fechado"
msgid "I2C Init Error"
msgstr "Erro de inicialização do I2C"
-#: shared-bindings/audiobusio/I2SOut.c
-msgid "I2SOut not available"
-msgstr "O I2SOut não está disponível"
-
#: shared-bindings/aesio/aes.c
#, c-format
msgid "IV must be %d bytes long"
@@ -1260,10 +1258,6 @@ msgstr "Não Conectado"
msgid "Not playing"
msgstr "Não está jogando"
-#: main.c
-msgid "Not running saved code.\n"
-msgstr "O código salvo não está em execução.\n"
-
#: shared-bindings/util.c
msgid ""
"Object has been deinitialized and can no longer be used. Create a new object."
@@ -1361,6 +1355,10 @@ msgstr "Além de quaisquer módulos no sistema de arquivos\n"
msgid "Polygon needs at least 3 points"
msgstr "O Polígono precisa de pelo menos 3 pontos"
+#: shared-bindings/ps2io/Ps2.c
+msgid "Pop from an empty Ps2 buffer"
+msgstr "Buffer Ps2 vazio"
+
#: shared-bindings/_bleio/Adapter.c
msgid "Prefix buffer must be on the heap"
msgstr ""
@@ -1436,8 +1434,12 @@ msgid "Row entry must be digitalio.DigitalInOut"
msgstr "A entrada da linha deve ser digitalio.DigitalInOut"
#: main.c
-msgid "Running in safe mode! "
-msgstr "Executando no modo de segurança! "
+msgid "Running in safe mode! Auto-reload is off.\n"
+msgstr "Rodando em modo seguro! Atualização automática está desligada.\n"
+
+#: main.c
+msgid "Running in safe mode! Not running saved code.\n"
+msgstr "Rodando em modo seguro! Não está executando o código salvo.\n"
#: shared-module/sdcardio/SDCard.c
msgid "SD card CSD format not supported"
@@ -1823,8 +1825,9 @@ msgid "__init__() should return None"
msgstr "O __init__() deve retornar Nenhum"
#: py/objtype.c
-msgid "__init__() should return None, not '%q'"
-msgstr "O __init__() deve retornar Nenhum, não '%q'"
+#, c-format
+msgid "__init__() should return None, not '%s'"
+msgstr "O __init__() deve retornar Nenhum, não '%s'"
#: py/objobject.c
msgid "__new__ arg must be a user-type"
@@ -1869,7 +1872,7 @@ msgstr "argumento tem tipo errado"
#: extmod/ulab/code/linalg/linalg.c
msgid "argument must be ndarray"
-msgstr "o argumento deve ser um ndarray"
+msgstr ""
#: py/argcheck.c shared-bindings/_stage/__init__.c
#: shared-bindings/digitalio/DigitalInOut.c shared-bindings/gamepad/GamePad.c
@@ -1977,7 +1980,7 @@ msgstr "bytes > 8 bits não suportado"
msgid "bytes value out of range"
msgstr "o valor dos bytes estão fora do alcance"
-#: ports/atmel-samd/bindings/samd/Clock.c ports/atmel-samd/common-hal/rtc/RTC.c
+#: ports/atmel-samd/bindings/samd/Clock.c
msgid "calibration is out of range"
msgstr "Calibração está fora do intervalo"
@@ -2009,17 +2012,48 @@ msgstr "não é possível adicionar o método especial à classe já subclassifi
msgid "can't assign to expression"
msgstr "a expressão não pode ser atribuída"
-#: py/obj.c py/objint.c shared-bindings/i2cperipheral/I2CPeripheral.c
-msgid "can't convert %q to %q"
-msgstr "não é possível converter %q para %q"
+#: py/obj.c
+#, c-format
+msgid "can't convert %s to complex"
+msgstr "Não é possível converter %s para complex"
+
+#: py/obj.c
+#, c-format
+msgid "can't convert %s to float"
+msgstr "Não é possível converter %s para float"
+
+#: py/obj.c
+#, c-format
+msgid "can't convert %s to int"
+msgstr "Não é possível converter %s para int"
#: py/objstr.c
msgid "can't convert '%q' object to %q implicitly"
msgstr "não é possível converter implicitamente o objeto '%q' para %q"
+#: py/objint.c
+msgid "can't convert NaN to int"
+msgstr "Não é possível converter NaN para int"
+
+#: shared-bindings/i2cperipheral/I2CPeripheral.c
+msgid "can't convert address to int"
+msgstr "não é possível converter o endereço para int"
+
+#: py/objint.c
+msgid "can't convert inf to int"
+msgstr "não é possível converter inf para int"
+
+#: py/obj.c
+msgid "can't convert to complex"
+msgstr "não é possível converter para complex"
+
#: py/obj.c
-msgid "can't convert to %q"
-msgstr "não é possível converter para %q"
+msgid "can't convert to float"
+msgstr "não é possível converter para float"
+
+#: py/obj.c
+msgid "can't convert to int"
+msgstr "não é possível converter para int"
#: py/objstr.c
msgid "can't convert to str implicitly"
@@ -2436,7 +2470,7 @@ msgstr "falta apenas a palavra chave do argumento '%q' da função"
msgid "function missing required positional argument #%d"
msgstr "falta o argumento #%d da posição necessária da função"
-#: py/argcheck.c py/bc.c py/objnamedtuple.c shared-bindings/time/__init__.c
+#: py/argcheck.c py/bc.c py/objnamedtuple.c
#, c-format
msgid "function takes %d positional arguments but %d were given"
msgstr "função leva %d argumentos posicionais, mas apenas %d foram passadas"
@@ -2485,7 +2519,10 @@ msgstr "preenchimento incorreto"
msgid "index is out of bounds"
msgstr "o índice está fora dos limites"
-#: py/obj.c
+#: ports/atmel-samd/common-hal/pulseio/PulseIn.c
+#: ports/cxd56/common-hal/pulseio/PulseIn.c
+#: ports/nrf/common-hal/pulseio/PulseIn.c
+#: ports/stm/common-hal/pulseio/PulseIn.c py/obj.c
msgid "index out of range"
msgstr "Índice fora do intervalo"
@@ -2846,8 +2883,9 @@ msgid "number of points must be at least 2"
msgstr "a quantidade dos pontos deve ser pelo menos 2"
#: py/obj.c
-msgid "object '%q' is not a tuple or list"
-msgstr "o objeto '%q' não é uma tupla ou uma lista"
+#, c-format
+msgid "object '%s' is not a tuple or list"
+msgstr "o objeto '%s' não é uma tupla ou uma lista"
#: py/obj.c
msgid "object does not support item assignment"
@@ -2882,8 +2920,9 @@ msgid "object not iterable"
msgstr "objeto não iterável"
#: py/obj.c
-msgid "object of type '%q' has no len()"
-msgstr "o objeto do tipo '%q' não tem len()"
+#, c-format
+msgid "object of type '%s' has no len()"
+msgstr "O objeto do tipo '%s' não possui len()"
#: py/obj.c
msgid "object with buffer protocol required"
@@ -2980,10 +3019,21 @@ msgstr "o polígono só pode ser registrado em um pai"
#: ports/atmel-samd/common-hal/pulseio/PulseIn.c
#: ports/cxd56/common-hal/pulseio/PulseIn.c
#: ports/nrf/common-hal/pulseio/PulseIn.c
-#: ports/stm/common-hal/pulseio/PulseIn.c py/objdict.c py/objlist.c py/objset.c
-#: shared-bindings/ps2io/Ps2.c
-msgid "pop from empty %q"
-msgstr "pop a partir do %q vazio"
+#: ports/stm/common-hal/pulseio/PulseIn.c
+msgid "pop from an empty PulseIn"
+msgstr "pop a partir de um PulseIn vazio"
+
+#: py/objset.c
+msgid "pop from an empty set"
+msgstr "pop a partir de um conjunto vazio"
+
+#: py/objlist.c
+msgid "pop from empty list"
+msgstr "pop a partir da lista vazia"
+
+#: py/objdict.c
+msgid "popitem(): dictionary is empty"
+msgstr "popitem(): o dicionário está vazio"
#: py/objint_mpz.c
msgid "pow() 3rd argument cannot be 0"
@@ -3020,7 +3070,7 @@ msgstr "a anotação do retorno deve ser um identificador"
#: py/emitnative.c
msgid "return expected '%q' but got '%q'"
-msgstr "o retorno esperado era '%q', porém obteve '%q'"
+msgstr "o retorno esperado era '%q', porém obteve '% q'"
#: shared-bindings/rgbmatrix/RGBMatrix.c
#, c-format
@@ -3141,8 +3191,13 @@ msgid "stream operation not supported"
msgstr "a operação do fluxo não é compatível"
#: py/objstrunicode.c
-msgid "string indices must be integers, not %q"
-msgstr "a sequência dos índices devem ser inteiros, não %q"
+msgid "string index out of range"
+msgstr "o índice da string está fora do intervalo"
+
+#: py/objstrunicode.c
+#, c-format
+msgid "string indices must be integers, not %s"
+msgstr "o índices das string devem ser números inteiros, não %s"
#: py/stream.c
msgid "string not supported; use bytes or bytearray"
@@ -3153,6 +3208,10 @@ msgid "struct: cannot index"
msgstr "struct: não pode indexar"
#: extmod/moductypes.c
+msgid "struct: index out of range"
+msgstr "struct: índice fora do intervalo"
+
+#: extmod/moductypes.c
msgid "struct: no fields"
msgstr "struct: sem campos"
@@ -3219,9 +3278,9 @@ msgstr "valores demais para descompactar (esperado %d)"
#: extmod/ulab/code/approx/approx.c
msgid "trapz is defined for 1D arrays of equal length"
-msgstr "o trapz está definido para 1D arrays de igual tamanho"
+msgstr ""
-#: extmod/ulab/code/linalg/linalg.c
+#: extmod/ulab/code/linalg/linalg.c py/objstr.c
msgid "tuple index out of range"
msgstr "o índice da tupla está fora do intervalo"
@@ -3288,8 +3347,9 @@ msgid "unknown conversion specifier %c"
msgstr "especificador de conversão desconhecido %c"
#: py/objstr.c
-msgid "unknown format code '%c' for object of type '%q'"
-msgstr "o formato do código '%c' é desconhecido para o objeto do tipo '%q'"
+#, c-format
+msgid "unknown format code '%c' for object of type '%s'"
+msgstr "código de formato desconhecido '%c' para o objeto do tipo '%s'"
#: py/compile.c
msgid "unknown type"
@@ -3328,16 +3388,16 @@ msgid "unsupported format character '%c' (0x%x) at index %d"
msgstr "o caractere do formato não é compatível '%c' (0x%x) no índice %d"
#: py/runtime.c
-msgid "unsupported type for %q: '%q'"
-msgstr "tipo sem suporte para %q: '%q'"
+msgid "unsupported type for %q: '%s'"
+msgstr "tipo não compatível para %q: '%s'"
#: py/runtime.c
msgid "unsupported type for operator"
msgstr "tipo não compatível para o operador"
#: py/runtime.c
-msgid "unsupported types for %q: '%q', '%q'"
-msgstr "tipo sem suporte para %q: '%q', '%q'"
+msgid "unsupported types for %q: '%s', '%s'"
+msgstr "tipos não compatíveis para %q: '%s', '%s'"
#: py/objint.c
#, c-format
@@ -3350,7 +3410,7 @@ msgstr "o value_count deve ser > 0"
#: extmod/ulab/code/linalg/linalg.c
msgid "vectors must have same lengths"
-msgstr "os vetores devem ter os mesmos comprimentos"
+msgstr ""
#: shared-bindings/watchdog/WatchDogTimer.c
msgid "watchdog timeout must be greater than 0"
@@ -3416,123 +3476,18 @@ msgstr "zi deve ser de um tipo float"
msgid "zi must be of shape (n_section, 2)"
msgstr "zi deve estar na forma (n_section, 2)"
-#~ msgid "%q indices must be integers, not %s"
-#~ msgstr "Os índices %q devem ser inteiros, e não %s"
-
-#~ msgid "'%s' object cannot assign attribute '%q'"
-#~ msgstr "O objeto '%s' não pode definir o atributo '%q'"
-
-#~ msgid "'%s' object does not support '%q'"
-#~ msgstr "O objeto '%s' não é compatível com '%q'"
-
-#~ msgid "'%s' object does not support item assignment"
-#~ msgstr "O objeto '%s' não compatível com a atribuição dos itens"
-
-#~ msgid "'%s' object does not support item deletion"
-#~ msgstr "O objeto '%s' não é compatível com exclusão do item"
-
-#~ msgid "'%s' object has no attribute '%q'"
-#~ msgstr "O objeto '%s' não possui o atributo '%q'"
-
-#~ msgid "'%s' object is not an iterator"
-#~ msgstr "O objeto '%s' não é um iterador"
-
-#~ msgid "'%s' object is not callable"
-#~ msgstr "O objeto '%s' não é invocável"
-
-#~ msgid "'%s' object is not iterable"
-#~ msgstr "O objeto '%s' não é iterável"
-
-#~ msgid "'%s' object is not subscriptable"
-#~ msgstr "O objeto '%s' não é subroteirizável"
-
-#~ msgid "Pop from an empty Ps2 buffer"
-#~ msgstr "Buffer Ps2 vazio"
-
-#~ msgid "Running in safe mode! Auto-reload is off.\n"
-#~ msgstr "Rodando em modo seguro! Atualização automática está desligada.\n"
-
-#~ msgid "Running in safe mode! Not running saved code.\n"
-#~ msgstr "Rodando em modo seguro! Não está executando o código salvo.\n"
-
-#~ msgid "__init__() should return None, not '%s'"
-#~ msgstr "O __init__() deve retornar Nenhum, não '%s'"
-
-#~ msgid "can't convert %s to complex"
-#~ msgstr "Não é possível converter %s para complex"
-
-#~ msgid "can't convert %s to float"
-#~ msgstr "Não é possível converter %s para float"
-
-#~ msgid "can't convert %s to int"
-#~ msgstr "Não é possível converter %s para int"
-
-#~ msgid "can't convert NaN to int"
-#~ msgstr "Não é possível converter NaN para int"
-
-#~ msgid "can't convert address to int"
-#~ msgstr "não é possível converter o endereço para int"
-
-#~ msgid "can't convert inf to int"
-#~ msgstr "não é possível converter inf para int"
-
-#~ msgid "can't convert to complex"
-#~ msgstr "não é possível converter para complex"
-
-#~ msgid "can't convert to float"
-#~ msgstr "não é possível converter para float"
-
-#~ msgid "can't convert to int"
-#~ msgstr "não é possível converter para int"
-
-#~ msgid "object '%s' is not a tuple or list"
-#~ msgstr "o objeto '%s' não é uma tupla ou uma lista"
-
-#~ msgid "object of type '%s' has no len()"
-#~ msgstr "O objeto do tipo '%s' não possui len()"
-
-#~ msgid "pop from an empty PulseIn"
-#~ msgstr "pop a partir de um PulseIn vazio"
-
-#~ msgid "pop from an empty set"
-#~ msgstr "pop a partir de um conjunto vazio"
-
-#~ msgid "pop from empty list"
-#~ msgstr "pop a partir da lista vazia"
-
-#~ msgid "popitem(): dictionary is empty"
-#~ msgstr "popitem(): o dicionário está vazio"
-
-#~ msgid "string index out of range"
-#~ msgstr "o índice da string está fora do intervalo"
-
-#~ msgid "string indices must be integers, not %s"
-#~ msgstr "o índices das string devem ser números inteiros, não %s"
-
-#~ msgid "struct: index out of range"
-#~ msgstr "struct: índice fora do intervalo"
-
-#~ msgid "unknown format code '%c' for object of type '%s'"
-#~ msgstr "código de formato desconhecido '%c' para o objeto do tipo '%s'"
-
-#~ msgid "unsupported type for %q: '%s'"
-#~ msgstr "tipo não compatível para %q: '%s'"
-
-#~ msgid "unsupported types for %q: '%s', '%s'"
-#~ msgstr "tipos não compatíveis para %q: '%s', '%s'"
-
#~ msgid "'%q' object is not bytes-like"
#~ msgstr "objetos '%q' não são bytes-like"
#~ msgid "'async for' or 'async with' outside async function"
#~ msgstr "'assíncrono para' ou 'assíncrono com' função assíncrona externa"
-#~ msgid "PulseIn not supported on this chip"
-#~ msgstr "O PulseIn não é compatível neste CI"
-
#~ msgid "PulseOut not supported on this chip"
#~ msgstr "O PulseOut não é compatível neste CI"
+#~ msgid "PulseIn not supported on this chip"
+#~ msgstr "O PulseIn não é compatível neste CI"
+
#~ msgid "AP required"
#~ msgstr "AP requerido"
diff --git a/locale/sv.po b/locale/sv.po
index 01a095b2d..0210094a9 100644
--- a/locale/sv.po
+++ b/locale/sv.po
@@ -5,8 +5,8 @@ msgid ""
msgstr ""
"Project-Id-Version: PACKAGE VERSION\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2020-08-04 18:42-0500\n"
-"PO-Revision-Date: 2020-08-05 20:32+0000\n"
+"POT-Creation-Date: 2020-07-28 16:57-0500\n"
+"PO-Revision-Date: 2020-07-25 20:58+0000\n"
"Last-Translator: Jonny Bergdahl <jonny@bergdahl.it>\n"
"Language-Team: LANGUAGE <LL@li.org>\n"
"Language: sv\n"
@@ -72,17 +72,13 @@ msgstr "%q-fel: %d"
msgid "%q in use"
msgstr "%q används redan"
-#: extmod/moductypes.c ports/atmel-samd/common-hal/pulseio/PulseIn.c
-#: ports/cxd56/common-hal/pulseio/PulseIn.c
-#: ports/nrf/common-hal/pulseio/PulseIn.c
-#: ports/stm/common-hal/pulseio/PulseIn.c py/obj.c py/objstr.c
-#: py/objstrunicode.c
+#: py/obj.c
msgid "%q index out of range"
msgstr "Index %q ligger utanför intervallet"
#: py/obj.c
-msgid "%q indices must be integers, not %q"
-msgstr ""
+msgid "%q indices must be integers, not %s"
+msgstr "Indexet %q måste vara ett heltal, inte %s"
#: shared-bindings/vectorio/Polygon.c
msgid "%q list must be a list"
@@ -120,42 +116,6 @@ msgstr "%q() kräver %d positionsargument men %d gavs"
msgid "'%q' argument required"
msgstr "'%q' argument krävs"
-#: py/runtime.c
-msgid "'%q' object cannot assign attribute '%q'"
-msgstr ""
-
-#: py/proto.c
-msgid "'%q' object does not support '%q'"
-msgstr ""
-
-#: py/obj.c
-msgid "'%q' object does not support item assignment"
-msgstr ""
-
-#: py/obj.c
-msgid "'%q' object does not support item deletion"
-msgstr ""
-
-#: py/runtime.c
-msgid "'%q' object has no attribute '%q'"
-msgstr ""
-
-#: py/runtime.c
-msgid "'%q' object is not an iterator"
-msgstr ""
-
-#: py/objtype.c py/runtime.c
-msgid "'%q' object is not callable"
-msgstr ""
-
-#: py/runtime.c
-msgid "'%q' object is not iterable"
-msgstr ""
-
-#: py/obj.c
-msgid "'%q' object is not subscriptable"
-msgstr ""
-
#: py/emitinlinethumb.c py/emitinlinextensa.c
#, c-format
msgid "'%s' expects a label"
@@ -206,6 +166,48 @@ msgstr "'%s' heltal %d ligger inte inom intervallet %d..%d"
msgid "'%s' integer 0x%x does not fit in mask 0x%x"
msgstr "'%s' heltal 0x%x ryms inte i mask 0x%x"
+#: py/runtime.c
+msgid "'%s' object cannot assign attribute '%q'"
+msgstr "Objektet '%s' kan inte tilldela attributet '%q'"
+
+#: py/proto.c
+msgid "'%s' object does not support '%q'"
+msgstr "Objektet '%s' har inte stöd för '%q'"
+
+#: py/obj.c
+#, c-format
+msgid "'%s' object does not support item assignment"
+msgstr "Objektet '%s' stöder inte tilldelningen"
+
+#: py/obj.c
+#, c-format
+msgid "'%s' object does not support item deletion"
+msgstr "Objektet '%s' stöder inte borttagning av objekt"
+
+#: py/runtime.c
+msgid "'%s' object has no attribute '%q'"
+msgstr "Objektet '%s' har inget attribut '%q'"
+
+#: py/runtime.c
+#, c-format
+msgid "'%s' object is not an iterator"
+msgstr "Objektet '%s' är inte en iterator"
+
+#: py/objtype.c py/runtime.c
+#, c-format
+msgid "'%s' object is not callable"
+msgstr "Objektet '%s' kan inte anropas"
+
+#: py/runtime.c
+#, c-format
+msgid "'%s' object is not iterable"
+msgstr "Objektet '%s' är inte itererable"
+
+#: py/obj.c
+#, c-format
+msgid "'%s' object is not subscriptable"
+msgstr "Objektet '%s' är inte indexbar"
+
#: py/objstr.c
msgid "'=' alignment not allowed in string format specifier"
msgstr "'='-justering tillåts inte i strängformatspecifikation"
@@ -224,7 +226,7 @@ msgstr "'await' utanför funktion"
#: py/compile.c
msgid "'await', 'async for' or 'async with' outside async function"
-msgstr "'await', 'async for' eller 'async with' utanför async-funktion"
+msgstr ""
#: py/compile.c
msgid "'break' outside loop"
@@ -873,10 +875,6 @@ msgstr "I/O-operation på stängd fil"
msgid "I2C Init Error"
msgstr "I2C init-fel"
-#: shared-bindings/audiobusio/I2SOut.c
-msgid "I2SOut not available"
-msgstr "I2SOut är inte tillgängligt"
-
#: shared-bindings/aesio/aes.c
#, c-format
msgid "IV must be %d bytes long"
@@ -1250,10 +1248,6 @@ msgstr "Inte ansluten"
msgid "Not playing"
msgstr "Ingen uppspelning"
-#: main.c
-msgid "Not running saved code.\n"
-msgstr ""
-
#: shared-bindings/util.c
msgid ""
"Object has been deinitialized and can no longer be used. Create a new object."
@@ -1349,6 +1343,10 @@ msgstr "Plus eventuella moduler i filsystemet\n"
msgid "Polygon needs at least 3 points"
msgstr "Polygonen behöver minst 3 punkter"
+#: shared-bindings/ps2io/Ps2.c
+msgid "Pop from an empty Ps2 buffer"
+msgstr "Pop från en tom Ps2-buffert"
+
#: shared-bindings/_bleio/Adapter.c
msgid "Prefix buffer must be on the heap"
msgstr "Prefixbufferten måste finnas på heap"
@@ -1422,8 +1420,12 @@ msgid "Row entry must be digitalio.DigitalInOut"
msgstr "Radvärdet måste vara digitalio.DigitalInOut"
#: main.c
-msgid "Running in safe mode! "
-msgstr ""
+msgid "Running in safe mode! Auto-reload is off.\n"
+msgstr "Kör i säkert läge! Autoladdning är avstängd.\n"
+
+#: main.c
+msgid "Running in safe mode! Not running saved code.\n"
+msgstr "Kör i säkert läge! Sparad kod körs inte.\n"
#: shared-module/sdcardio/SDCard.c
msgid "SD card CSD format not supported"
@@ -1801,8 +1803,9 @@ msgid "__init__() should return None"
msgstr "__init __ () ska returnera None"
#: py/objtype.c
-msgid "__init__() should return None, not '%q'"
-msgstr ""
+#, c-format
+msgid "__init__() should return None, not '%s'"
+msgstr "__init __ () ska returnera None, inte '%s'"
#: py/objobject.c
msgid "__new__ arg must be a user-type"
@@ -1847,7 +1850,7 @@ msgstr "argumentet har fel typ"
#: extmod/ulab/code/linalg/linalg.c
msgid "argument must be ndarray"
-msgstr "argumentet måste vara ndarray"
+msgstr ""
#: py/argcheck.c shared-bindings/_stage/__init__.c
#: shared-bindings/digitalio/DigitalInOut.c shared-bindings/gamepad/GamePad.c
@@ -1955,7 +1958,7 @@ msgstr "bytes> 8 bitar stöds inte"
msgid "bytes value out of range"
msgstr "bytevärde utanför intervallet"
-#: ports/atmel-samd/bindings/samd/Clock.c ports/atmel-samd/common-hal/rtc/RTC.c
+#: ports/atmel-samd/bindings/samd/Clock.c
msgid "calibration is out of range"
msgstr "kalibrering är utanför intervallet"
@@ -1987,17 +1990,48 @@ msgstr "kan inte lägga till särskild metod för redan subklassad klass"
msgid "can't assign to expression"
msgstr "kan inte tilldela uttryck"
-#: py/obj.c py/objint.c shared-bindings/i2cperipheral/I2CPeripheral.c
-msgid "can't convert %q to %q"
-msgstr ""
+#: py/obj.c
+#, c-format
+msgid "can't convert %s to complex"
+msgstr "kan inte konvertera %s till komplex"
+
+#: py/obj.c
+#, c-format
+msgid "can't convert %s to float"
+msgstr "kan inte konvertera %s till float"
+
+#: py/obj.c
+#, c-format
+msgid "can't convert %s to int"
+msgstr "kan inte konvertera %s till int"
#: py/objstr.c
msgid "can't convert '%q' object to %q implicitly"
msgstr "kan inte konvertera '%q' objekt implicit till %q"
+#: py/objint.c
+msgid "can't convert NaN to int"
+msgstr "kan inte konvertera NaN till int"
+
+#: shared-bindings/i2cperipheral/I2CPeripheral.c
+msgid "can't convert address to int"
+msgstr "kan inte konvertera address till int"
+
+#: py/objint.c
+msgid "can't convert inf to int"
+msgstr "kan inte konvertera inf till int"
+
#: py/obj.c
-msgid "can't convert to %q"
-msgstr ""
+msgid "can't convert to complex"
+msgstr "kan inte konvertera till komplex"
+
+#: py/obj.c
+msgid "can't convert to float"
+msgstr "kan inte konvertera till float"
+
+#: py/obj.c
+msgid "can't convert to int"
+msgstr "kan inte konvertera till int"
#: py/objstr.c
msgid "can't convert to str implicitly"
@@ -2081,7 +2115,7 @@ msgstr ""
#: py/objtype.c
msgid "cannot create '%q' instances"
-msgstr "kan inte skapa instanser av '%q'"
+msgstr "kan inte skapa instanser av '% q'"
#: py/objtype.c
msgid "cannot create instance"
@@ -2409,7 +2443,7 @@ msgstr "funktionen saknar det obligatoriska nyckelordsargumentet '%q'"
msgid "function missing required positional argument #%d"
msgstr "funktionen saknar det obligatoriska positionsargumentet #%d"
-#: py/argcheck.c py/bc.c py/objnamedtuple.c shared-bindings/time/__init__.c
+#: py/argcheck.c py/bc.c py/objnamedtuple.c
#, c-format
msgid "function takes %d positional arguments but %d were given"
msgstr "funktionen kräver %d positionsargument men %d angavs"
@@ -2458,7 +2492,10 @@ msgstr "felaktig utfyllnad"
msgid "index is out of bounds"
msgstr "index är utanför gränserna"
-#: py/obj.c
+#: ports/atmel-samd/common-hal/pulseio/PulseIn.c
+#: ports/cxd56/common-hal/pulseio/PulseIn.c
+#: ports/nrf/common-hal/pulseio/PulseIn.c
+#: ports/stm/common-hal/pulseio/PulseIn.c py/obj.c
msgid "index out of range"
msgstr "index utanför intervallet"
@@ -2817,8 +2854,9 @@ msgid "number of points must be at least 2"
msgstr "antal punkter måste vara minst 2"
#: py/obj.c
-msgid "object '%q' is not a tuple or list"
-msgstr ""
+#, c-format
+msgid "object '%s' is not a tuple or list"
+msgstr "objektet '%s' är inte en tupel eller lista"
#: py/obj.c
msgid "object does not support item assignment"
@@ -2853,8 +2891,9 @@ msgid "object not iterable"
msgstr "objektet är inte iterable"
#: py/obj.c
-msgid "object of type '%q' has no len()"
-msgstr ""
+#, c-format
+msgid "object of type '%s' has no len()"
+msgstr "objekt av typen '%s' har ingen len()"
#: py/obj.c
msgid "object with buffer protocol required"
@@ -2947,10 +2986,21 @@ msgstr "polygon kan endast registreras i en förälder"
#: ports/atmel-samd/common-hal/pulseio/PulseIn.c
#: ports/cxd56/common-hal/pulseio/PulseIn.c
#: ports/nrf/common-hal/pulseio/PulseIn.c
-#: ports/stm/common-hal/pulseio/PulseIn.c py/objdict.c py/objlist.c py/objset.c
-#: shared-bindings/ps2io/Ps2.c
-msgid "pop from empty %q"
-msgstr ""
+#: ports/stm/common-hal/pulseio/PulseIn.c
+msgid "pop from an empty PulseIn"
+msgstr "pop från en tom PulseIn"
+
+#: py/objset.c
+msgid "pop from an empty set"
+msgstr "pop från en tom uppsättning"
+
+#: py/objlist.c
+msgid "pop from empty list"
+msgstr "pop från tom lista"
+
+#: py/objdict.c
+msgid "popitem(): dictionary is empty"
+msgstr "popitem(): ordlistan är tom"
#: py/objint_mpz.c
msgid "pow() 3rd argument cannot be 0"
@@ -3108,8 +3158,13 @@ msgid "stream operation not supported"
msgstr "stream-åtgärd stöds inte"
#: py/objstrunicode.c
-msgid "string indices must be integers, not %q"
-msgstr ""
+msgid "string index out of range"
+msgstr "strängindex utanför intervallet"
+
+#: py/objstrunicode.c
+#, c-format
+msgid "string indices must be integers, not %s"
+msgstr "strängindex måste vara heltal, inte %s"
#: py/stream.c
msgid "string not supported; use bytes or bytearray"
@@ -3120,6 +3175,10 @@ msgid "struct: cannot index"
msgstr "struct: kan inte indexera"
#: extmod/moductypes.c
+msgid "struct: index out of range"
+msgstr "struct: index utanför intervallet"
+
+#: extmod/moductypes.c
msgid "struct: no fields"
msgstr "struct: inga fält"
@@ -3186,9 +3245,9 @@ msgstr "för många värden att packa upp (förväntat %d)"
#: extmod/ulab/code/approx/approx.c
msgid "trapz is defined for 1D arrays of equal length"
-msgstr "interp är definierad för 1D-matriser med samma längd"
+msgstr ""
-#: extmod/ulab/code/linalg/linalg.c
+#: extmod/ulab/code/linalg/linalg.c py/objstr.c
msgid "tuple index out of range"
msgstr "tupelindex utanför intervallet"
@@ -3255,8 +3314,9 @@ msgid "unknown conversion specifier %c"
msgstr "okänd konverteringsspecificerare %c"
#: py/objstr.c
-msgid "unknown format code '%c' for object of type '%q'"
-msgstr ""
+#, c-format
+msgid "unknown format code '%c' for object of type '%s'"
+msgstr "okänt format '%c' för objekt av typ '%s'"
#: py/compile.c
msgid "unknown type"
@@ -3295,16 +3355,16 @@ msgid "unsupported format character '%c' (0x%x) at index %d"
msgstr "Formattecknet '%c' (0x%x) stöds inte vid index %d"
#: py/runtime.c
-msgid "unsupported type for %q: '%q'"
-msgstr ""
+msgid "unsupported type for %q: '%s'"
+msgstr "typ som inte stöds för %q: '%s'"
#: py/runtime.c
msgid "unsupported type for operator"
msgstr "typ stöds inte för operatören"
#: py/runtime.c
-msgid "unsupported types for %q: '%q', '%q'"
-msgstr ""
+msgid "unsupported types for %q: '%s', '%s'"
+msgstr "typ som inte stöds för %q: '%s', '%s'"
#: py/objint.c
#, c-format
@@ -3317,7 +3377,7 @@ msgstr "value_count måste vara > 0"
#: extmod/ulab/code/linalg/linalg.c
msgid "vectors must have same lengths"
-msgstr "vektorer måste ha samma längd"
+msgstr ""
#: shared-bindings/watchdog/WatchDogTimer.c
msgid "watchdog timeout must be greater than 0"
@@ -3383,118 +3443,16 @@ msgstr "zi måste vara av typ float"
msgid "zi must be of shape (n_section, 2)"
msgstr "zi måste vara i formen (n_section, 2)"
-#~ msgid "%q indices must be integers, not %s"
-#~ msgstr "Indexet %q måste vara ett heltal, inte %s"
-
-#~ msgid "'%s' object cannot assign attribute '%q'"
-#~ msgstr "Objektet '%s' kan inte tilldela attributet '%q'"
-
-#~ msgid "'%s' object does not support '%q'"
-#~ msgstr "Objektet '%s' har inte stöd för '%q'"
-
-#~ msgid "'%s' object does not support item assignment"
-#~ msgstr "Objektet '%s' stöder inte tilldelningen"
-
-#~ msgid "'%s' object does not support item deletion"
-#~ msgstr "Objektet '%s' stöder inte borttagning av objekt"
-
-#~ msgid "'%s' object has no attribute '%q'"
-#~ msgstr "Objektet '%s' har inget attribut '%q'"
-
-#~ msgid "'%s' object is not an iterator"
-#~ msgstr "Objektet '%s' är inte en iterator"
-
-#~ msgid "'%s' object is not callable"
-#~ msgstr "Objektet '%s' kan inte anropas"
-
-#~ msgid "'%s' object is not iterable"
-#~ msgstr "Objektet '%s' är inte itererable"
-
-#~ msgid "'%s' object is not subscriptable"
-#~ msgstr "Objektet '%s' är inte indexbar"
-
-#~ msgid "Pop from an empty Ps2 buffer"
-#~ msgstr "Pop från en tom Ps2-buffert"
-
-#~ msgid "Running in safe mode! Auto-reload is off.\n"
-#~ msgstr "Kör i säkert läge! Autoladdning är avstängd.\n"
-
-#~ msgid "Running in safe mode! Not running saved code.\n"
-#~ msgstr "Kör i säkert läge! Sparad kod körs inte.\n"
-
-#~ msgid "__init__() should return None, not '%s'"
-#~ msgstr "__init __ () ska returnera None, inte '%s'"
-
-#~ msgid "can't convert %s to complex"
-#~ msgstr "kan inte konvertera %s till komplex"
-
-#~ msgid "can't convert %s to float"
-#~ msgstr "kan inte konvertera %s till float"
-
-#~ msgid "can't convert %s to int"
-#~ msgstr "kan inte konvertera %s till int"
-
-#~ msgid "can't convert NaN to int"
-#~ msgstr "kan inte konvertera NaN till int"
-
-#~ msgid "can't convert address to int"
-#~ msgstr "kan inte konvertera address till int"
-
-#~ msgid "can't convert inf to int"
-#~ msgstr "kan inte konvertera inf till int"
-
-#~ msgid "can't convert to complex"
-#~ msgstr "kan inte konvertera till komplex"
-
-#~ msgid "can't convert to float"
-#~ msgstr "kan inte konvertera till float"
-
-#~ msgid "can't convert to int"
-#~ msgstr "kan inte konvertera till int"
-
-#~ msgid "object '%s' is not a tuple or list"
-#~ msgstr "objektet '%s' är inte en tupel eller lista"
-
-#~ msgid "object of type '%s' has no len()"
-#~ msgstr "objekt av typen '%s' har ingen len()"
-
-#~ msgid "pop from an empty PulseIn"
-#~ msgstr "pop från en tom PulseIn"
-
-#~ msgid "pop from an empty set"
-#~ msgstr "pop från en tom uppsättning"
-
-#~ msgid "pop from empty list"
-#~ msgstr "pop från tom lista"
-
-#~ msgid "popitem(): dictionary is empty"
-#~ msgstr "popitem(): ordlistan är tom"
-
-#~ msgid "string index out of range"
-#~ msgstr "strängindex utanför intervallet"
-
-#~ msgid "string indices must be integers, not %s"
-#~ msgstr "strängindex måste vara heltal, inte %s"
-
-#~ msgid "struct: index out of range"
-#~ msgstr "struct: index utanför intervallet"
-
-#~ msgid "unknown format code '%c' for object of type '%s'"
-#~ msgstr "okänt format '%c' för objekt av typ '%s'"
-
-#~ msgid "unsupported type for %q: '%s'"
-#~ msgstr "typ som inte stöds för %q: '%s'"
-
-#~ msgid "unsupported types for %q: '%s', '%s'"
-#~ msgstr "typ som inte stöds för %q: '%s', '%s'"
+#~ msgid "'%q' object is not bytes-like"
+#~ msgstr "%q-objektet är inte byte-lik"
#~ msgid "'async for' or 'async with' outside async function"
#~ msgstr "'async for' eller 'async with' utanför async-funktion"
-#~ msgid "PulseIn not supported on this chip"
+#~ msgid "PulseOut not supported on this chip"
#~ msgstr "PulseIn stöds inte av detta chip"
-#~ msgid "PulseOut not supported on this chip"
+#~ msgid "PulseIn not supported on this chip"
#~ msgstr "PulseIn stöds inte av detta chip"
#~ msgid "I2C operation not supported"
diff --git a/locale/zh_Latn_pinyin.po b/locale/zh_Latn_pinyin.po
index c2856ace2..32928976d 100644
--- a/locale/zh_Latn_pinyin.po
+++ b/locale/zh_Latn_pinyin.po
@@ -6,7 +6,7 @@ msgid ""
msgstr ""
"Project-Id-Version: circuitpython-cn\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2020-08-04 18:42-0500\n"
+"POT-Creation-Date: 2020-07-28 16:57-0500\n"
"PO-Revision-Date: 2019-04-13 10:10-0700\n"
"Last-Translator: hexthat\n"
"Language-Team: Chinese Hanyu Pinyin\n"
@@ -72,17 +72,13 @@ msgstr ""
msgid "%q in use"
msgstr "%q zhèngzài shǐyòng"
-#: extmod/moductypes.c ports/atmel-samd/common-hal/pulseio/PulseIn.c
-#: ports/cxd56/common-hal/pulseio/PulseIn.c
-#: ports/nrf/common-hal/pulseio/PulseIn.c
-#: ports/stm/common-hal/pulseio/PulseIn.c py/obj.c py/objstr.c
-#: py/objstrunicode.c
+#: py/obj.c
msgid "%q index out of range"
msgstr "%q suǒyǐn chāochū fànwéi"
#: py/obj.c
-msgid "%q indices must be integers, not %q"
-msgstr ""
+msgid "%q indices must be integers, not %s"
+msgstr "%q suǒyǐn bìxū shì zhěngshù, ér bùshì %s"
#: shared-bindings/vectorio/Polygon.c
msgid "%q list must be a list"
@@ -120,42 +116,6 @@ msgstr "%q() cǎiyòng %d wèizhì cānshù, dàn gěi chū %d"
msgid "'%q' argument required"
msgstr "xūyào '%q' cānshù"
-#: py/runtime.c
-msgid "'%q' object cannot assign attribute '%q'"
-msgstr ""
-
-#: py/proto.c
-msgid "'%q' object does not support '%q'"
-msgstr ""
-
-#: py/obj.c
-msgid "'%q' object does not support item assignment"
-msgstr ""
-
-#: py/obj.c
-msgid "'%q' object does not support item deletion"
-msgstr ""
-
-#: py/runtime.c
-msgid "'%q' object has no attribute '%q'"
-msgstr ""
-
-#: py/runtime.c
-msgid "'%q' object is not an iterator"
-msgstr ""
-
-#: py/objtype.c py/runtime.c
-msgid "'%q' object is not callable"
-msgstr ""
-
-#: py/runtime.c
-msgid "'%q' object is not iterable"
-msgstr ""
-
-#: py/obj.c
-msgid "'%q' object is not subscriptable"
-msgstr ""
-
#: py/emitinlinethumb.c py/emitinlinextensa.c
#, c-format
msgid "'%s' expects a label"
@@ -206,6 +166,48 @@ msgstr "'%s' zhěngshù %d bùzài fànwéi nèi %d.%d"
msgid "'%s' integer 0x%x does not fit in mask 0x%x"
msgstr "'%s' zhěngshù 0x%x bù shìyòng yú yǎn mǎ 0x%x"
+#: py/runtime.c
+msgid "'%s' object cannot assign attribute '%q'"
+msgstr ""
+
+#: py/proto.c
+msgid "'%s' object does not support '%q'"
+msgstr "'%s' duì xiàng bù zhīchí '%q'"
+
+#: py/obj.c
+#, c-format
+msgid "'%s' object does not support item assignment"
+msgstr "'%s' duìxiàng bù zhīchí xiàngmù fēnpèi"
+
+#: py/obj.c
+#, c-format
+msgid "'%s' object does not support item deletion"
+msgstr "'%s' duìxiàng bù zhīchí shānchú xiàngmù"
+
+#: py/runtime.c
+msgid "'%s' object has no attribute '%q'"
+msgstr "'%s' duìxiàng méiyǒu shǔxìng '%q'"
+
+#: py/runtime.c
+#, c-format
+msgid "'%s' object is not an iterator"
+msgstr "'%s' duìxiàng bùshì yīgè diédài qì"
+
+#: py/objtype.c py/runtime.c
+#, c-format
+msgid "'%s' object is not callable"
+msgstr "'%s' duìxiàng wúfǎ diàoyòng"
+
+#: py/runtime.c
+#, c-format
+msgid "'%s' object is not iterable"
+msgstr "'%s' duìxiàng bùnéng diédài"
+
+#: py/obj.c
+#, c-format
+msgid "'%s' object is not subscriptable"
+msgstr "'%s' duìxiàng bùnéng fēnshù"
+
#: py/objstr.c
msgid "'=' alignment not allowed in string format specifier"
msgstr "zìfú chuàn géshì shuōmíng fú zhōng bù yǔnxǔ '=' duìqí"
@@ -869,10 +871,6 @@ msgstr "Wénjiàn shàng de I/ O cāozuò"
msgid "I2C Init Error"
msgstr "I2C chūshǐhuà cuòwù"
-#: shared-bindings/audiobusio/I2SOut.c
-msgid "I2SOut not available"
-msgstr ""
-
#: shared-bindings/aesio/aes.c
#, c-format
msgid "IV must be %d bytes long"
@@ -1245,10 +1243,6 @@ msgstr "Wèi liánjiē"
msgid "Not playing"
msgstr "Wèi bòfàng"
-#: main.c
-msgid "Not running saved code.\n"
-msgstr ""
-
#: shared-bindings/util.c
msgid ""
"Object has been deinitialized and can no longer be used. Create a new object."
@@ -1340,6 +1334,10 @@ msgstr "Zài wénjiàn xìtǒng shàng tiānjiā rènhé mókuài\n"
msgid "Polygon needs at least 3 points"
msgstr ""
+#: shared-bindings/ps2io/Ps2.c
+msgid "Pop from an empty Ps2 buffer"
+msgstr "Cóng kōng de Ps2 huǎnchōng qū dànchū"
+
#: shared-bindings/_bleio/Adapter.c
msgid "Prefix buffer must be on the heap"
msgstr "Qiánzhuì huǎnchōng qū bìxū zài duī shàng"
@@ -1412,8 +1410,12 @@ msgid "Row entry must be digitalio.DigitalInOut"
msgstr "Xíng xiàng bìxū shì digitalio.DigitalInOut"
#: main.c
-msgid "Running in safe mode! "
-msgstr ""
+msgid "Running in safe mode! Auto-reload is off.\n"
+msgstr "Zài ānquán móshì xià yùnxíng! Zìdòng chóngxīn jiāzài yǐ guānbì.\n"
+
+#: main.c
+msgid "Running in safe mode! Not running saved code.\n"
+msgstr "Zài ānquán móshì xià yùnxíng! Bù yùnxíng yǐ bǎocún de dàimǎ.\n"
#: shared-module/sdcardio/SDCard.c
msgid "SD card CSD format not supported"
@@ -1787,8 +1789,9 @@ msgid "__init__() should return None"
msgstr "__init__() fǎnhuí not"
#: py/objtype.c
-msgid "__init__() should return None, not '%q'"
-msgstr ""
+#, c-format
+msgid "__init__() should return None, not '%s'"
+msgstr "__Init__() yīnggāi fǎnhuí not, ér bùshì '%s'"
#: py/objobject.c
msgid "__new__ arg must be a user-type"
@@ -1941,7 +1944,7 @@ msgstr "zì jié > 8 wèi"
msgid "bytes value out of range"
msgstr "zì jié zhí chāochū fànwéi"
-#: ports/atmel-samd/bindings/samd/Clock.c ports/atmel-samd/common-hal/rtc/RTC.c
+#: ports/atmel-samd/bindings/samd/Clock.c
msgid "calibration is out of range"
msgstr "jiàozhǔn fànwéi chāochū fànwéi"
@@ -1973,17 +1976,48 @@ msgstr "wúfǎ tiānjiā tèshū fāngfǎ dào zi fēnlèi lèi"
msgid "can't assign to expression"
msgstr "bùnéng fēnpèi dào biǎodá shì"
-#: py/obj.c py/objint.c shared-bindings/i2cperipheral/I2CPeripheral.c
-msgid "can't convert %q to %q"
-msgstr ""
+#: py/obj.c
+#, c-format
+msgid "can't convert %s to complex"
+msgstr "wúfǎ zhuǎnhuàn%s dào fùzá"
+
+#: py/obj.c
+#, c-format
+msgid "can't convert %s to float"
+msgstr "wúfǎ zhuǎnhuàn %s dào fú diǎn xíng biànliàng"
+
+#: py/obj.c
+#, c-format
+msgid "can't convert %s to int"
+msgstr "wúfǎ zhuǎnhuàn%s dào int"
#: py/objstr.c
msgid "can't convert '%q' object to %q implicitly"
msgstr "wúfǎ jiāng '%q' duìxiàng zhuǎnhuàn wèi %q yǐn hán"
+#: py/objint.c
+msgid "can't convert NaN to int"
+msgstr "wúfǎ jiāng dǎoháng zhuǎnhuàn wèi int"
+
+#: shared-bindings/i2cperipheral/I2CPeripheral.c
+msgid "can't convert address to int"
+msgstr "wúfǎ jiāng dìzhǐ zhuǎnhuàn wèi int"
+
+#: py/objint.c
+msgid "can't convert inf to int"
+msgstr "bùnéng jiāng inf zhuǎnhuàn wèi int"
+
#: py/obj.c
-msgid "can't convert to %q"
-msgstr ""
+msgid "can't convert to complex"
+msgstr "bùnéng zhuǎnhuàn wèi fùzá"
+
+#: py/obj.c
+msgid "can't convert to float"
+msgstr "bùnéng zhuǎnhuàn wèi fú diǎn"
+
+#: py/obj.c
+msgid "can't convert to int"
+msgstr "bùnéng zhuǎnhuàn wèi int"
#: py/objstr.c
msgid "can't convert to str implicitly"
@@ -2394,7 +2428,7 @@ msgstr "hánshù quēshǎo suǒ xū guānjiàn zì cānshù '%q'"
msgid "function missing required positional argument #%d"
msgstr "hánshù quēshǎo suǒ xū de wèizhì cānshù #%d"
-#: py/argcheck.c py/bc.c py/objnamedtuple.c shared-bindings/time/__init__.c
+#: py/argcheck.c py/bc.c py/objnamedtuple.c
#, c-format
msgid "function takes %d positional arguments but %d were given"
msgstr "hánshù xūyào %d gè wèizhì cānshù, dàn %d bèi gěi chū"
@@ -2443,7 +2477,10 @@ msgstr "bù zhèngquè de tiánchōng"
msgid "index is out of bounds"
msgstr ""
-#: py/obj.c
+#: ports/atmel-samd/common-hal/pulseio/PulseIn.c
+#: ports/cxd56/common-hal/pulseio/PulseIn.c
+#: ports/nrf/common-hal/pulseio/PulseIn.c
+#: ports/stm/common-hal/pulseio/PulseIn.c py/obj.c
msgid "index out of range"
msgstr "suǒyǐn chāochū fànwéi"
@@ -2801,8 +2838,9 @@ msgid "number of points must be at least 2"
msgstr ""
#: py/obj.c
-msgid "object '%q' is not a tuple or list"
-msgstr ""
+#, c-format
+msgid "object '%s' is not a tuple or list"
+msgstr "duìxiàng '%s' bùshì yuán zǔ huò lièbiǎo"
#: py/obj.c
msgid "object does not support item assignment"
@@ -2837,8 +2875,9 @@ msgid "object not iterable"
msgstr "duìxiàng bùnéng diédài"
#: py/obj.c
-msgid "object of type '%q' has no len()"
-msgstr ""
+#, c-format
+msgid "object of type '%s' has no len()"
+msgstr "lèixíng '%s' de duìxiàng méiyǒu chángdù"
#: py/obj.c
msgid "object with buffer protocol required"
@@ -2930,10 +2969,21 @@ msgstr ""
#: ports/atmel-samd/common-hal/pulseio/PulseIn.c
#: ports/cxd56/common-hal/pulseio/PulseIn.c
#: ports/nrf/common-hal/pulseio/PulseIn.c
-#: ports/stm/common-hal/pulseio/PulseIn.c py/objdict.c py/objlist.c py/objset.c
-#: shared-bindings/ps2io/Ps2.c
-msgid "pop from empty %q"
-msgstr ""
+#: ports/stm/common-hal/pulseio/PulseIn.c
+msgid "pop from an empty PulseIn"
+msgstr "cóng kōng de PulseIn dànchū dànchū"
+
+#: py/objset.c
+msgid "pop from an empty set"
+msgstr "cóng kōng jí dànchū"
+
+#: py/objlist.c
+msgid "pop from empty list"
+msgstr "cóng kōng lièbiǎo zhòng dànchū"
+
+#: py/objdict.c
+msgid "popitem(): dictionary is empty"
+msgstr "dànchū xiàngmù (): Zìdiǎn wèi kōng"
#: py/objint_mpz.c
msgid "pow() 3rd argument cannot be 0"
@@ -3091,8 +3141,13 @@ msgid "stream operation not supported"
msgstr "bù zhīchí liú cāozuò"
#: py/objstrunicode.c
-msgid "string indices must be integers, not %q"
-msgstr ""
+msgid "string index out of range"
+msgstr "zìfú chuàn suǒyǐn chāochū fànwéi"
+
+#: py/objstrunicode.c
+#, c-format
+msgid "string indices must be integers, not %s"
+msgstr "zìfú chuàn zhǐshù bìxū shì zhěngshù, ér bùshì %s"
#: py/stream.c
msgid "string not supported; use bytes or bytearray"
@@ -3103,6 +3158,10 @@ msgid "struct: cannot index"
msgstr "jiégòu: bùnéng suǒyǐn"
#: extmod/moductypes.c
+msgid "struct: index out of range"
+msgstr "jiégòu: suǒyǐn chāochū fànwéi"
+
+#: extmod/moductypes.c
msgid "struct: no fields"
msgstr "jiégòu: méiyǒu zìduàn"
@@ -3171,7 +3230,7 @@ msgstr "dǎkāi tài duō zhí (yùqí %d)"
msgid "trapz is defined for 1D arrays of equal length"
msgstr ""
-#: extmod/ulab/code/linalg/linalg.c
+#: extmod/ulab/code/linalg/linalg.c py/objstr.c
msgid "tuple index out of range"
msgstr "yuán zǔ suǒyǐn chāochū fànwéi"
@@ -3238,8 +3297,9 @@ msgid "unknown conversion specifier %c"
msgstr "wèizhī de zhuǎnhuàn biāozhù %c"
#: py/objstr.c
-msgid "unknown format code '%c' for object of type '%q'"
-msgstr ""
+#, fuzzy, c-format
+msgid "unknown format code '%c' for object of type '%s'"
+msgstr "lèixíng '%s' duìxiàng wèizhī de géshì dàimǎ '%c'"
#: py/compile.c
msgid "unknown type"
@@ -3278,16 +3338,16 @@ msgid "unsupported format character '%c' (0x%x) at index %d"
msgstr "bù zhīchí de géshì zìfú '%c' (0x%x) suǒyǐn %d"
#: py/runtime.c
-msgid "unsupported type for %q: '%q'"
-msgstr ""
+msgid "unsupported type for %q: '%s'"
+msgstr "bù zhīchí de lèixíng %q: '%s'"
#: py/runtime.c
msgid "unsupported type for operator"
msgstr "bù zhīchí de cāozuò zhě lèixíng"
#: py/runtime.c
-msgid "unsupported types for %q: '%q', '%q'"
-msgstr ""
+msgid "unsupported types for %q: '%s', '%s'"
+msgstr "bù zhīchí de lèixíng wèi %q: '%s', '%s'"
#: py/objint.c
#, c-format
@@ -3366,109 +3426,6 @@ msgstr ""
msgid "zi must be of shape (n_section, 2)"
msgstr ""
-#~ msgid "%q indices must be integers, not %s"
-#~ msgstr "%q suǒyǐn bìxū shì zhěngshù, ér bùshì %s"
-
-#~ msgid "'%s' object does not support '%q'"
-#~ msgstr "'%s' duì xiàng bù zhīchí '%q'"
-
-#~ msgid "'%s' object does not support item assignment"
-#~ msgstr "'%s' duìxiàng bù zhīchí xiàngmù fēnpèi"
-
-#~ msgid "'%s' object does not support item deletion"
-#~ msgstr "'%s' duìxiàng bù zhīchí shānchú xiàngmù"
-
-#~ msgid "'%s' object has no attribute '%q'"
-#~ msgstr "'%s' duìxiàng méiyǒu shǔxìng '%q'"
-
-#~ msgid "'%s' object is not an iterator"
-#~ msgstr "'%s' duìxiàng bùshì yīgè diédài qì"
-
-#~ msgid "'%s' object is not callable"
-#~ msgstr "'%s' duìxiàng wúfǎ diàoyòng"
-
-#~ msgid "'%s' object is not iterable"
-#~ msgstr "'%s' duìxiàng bùnéng diédài"
-
-#~ msgid "'%s' object is not subscriptable"
-#~ msgstr "'%s' duìxiàng bùnéng fēnshù"
-
-#~ msgid "Pop from an empty Ps2 buffer"
-#~ msgstr "Cóng kōng de Ps2 huǎnchōng qū dànchū"
-
-#~ msgid "Running in safe mode! Auto-reload is off.\n"
-#~ msgstr "Zài ānquán móshì xià yùnxíng! Zìdòng chóngxīn jiāzài yǐ guānbì.\n"
-
-#~ msgid "Running in safe mode! Not running saved code.\n"
-#~ msgstr "Zài ānquán móshì xià yùnxíng! Bù yùnxíng yǐ bǎocún de dàimǎ.\n"
-
-#~ msgid "__init__() should return None, not '%s'"
-#~ msgstr "__Init__() yīnggāi fǎnhuí not, ér bùshì '%s'"
-
-#~ msgid "can't convert %s to complex"
-#~ msgstr "wúfǎ zhuǎnhuàn%s dào fùzá"
-
-#~ msgid "can't convert %s to float"
-#~ msgstr "wúfǎ zhuǎnhuàn %s dào fú diǎn xíng biànliàng"
-
-#~ msgid "can't convert %s to int"
-#~ msgstr "wúfǎ zhuǎnhuàn%s dào int"
-
-#~ msgid "can't convert NaN to int"
-#~ msgstr "wúfǎ jiāng dǎoháng zhuǎnhuàn wèi int"
-
-#~ msgid "can't convert address to int"
-#~ msgstr "wúfǎ jiāng dìzhǐ zhuǎnhuàn wèi int"
-
-#~ msgid "can't convert inf to int"
-#~ msgstr "bùnéng jiāng inf zhuǎnhuàn wèi int"
-
-#~ msgid "can't convert to complex"
-#~ msgstr "bùnéng zhuǎnhuàn wèi fùzá"
-
-#~ msgid "can't convert to float"
-#~ msgstr "bùnéng zhuǎnhuàn wèi fú diǎn"
-
-#~ msgid "can't convert to int"
-#~ msgstr "bùnéng zhuǎnhuàn wèi int"
-
-#~ msgid "object '%s' is not a tuple or list"
-#~ msgstr "duìxiàng '%s' bùshì yuán zǔ huò lièbiǎo"
-
-#~ msgid "object of type '%s' has no len()"
-#~ msgstr "lèixíng '%s' de duìxiàng méiyǒu chángdù"
-
-#~ msgid "pop from an empty PulseIn"
-#~ msgstr "cóng kōng de PulseIn dànchū dànchū"
-
-#~ msgid "pop from an empty set"
-#~ msgstr "cóng kōng jí dànchū"
-
-#~ msgid "pop from empty list"
-#~ msgstr "cóng kōng lièbiǎo zhòng dànchū"
-
-#~ msgid "popitem(): dictionary is empty"
-#~ msgstr "dànchū xiàngmù (): Zìdiǎn wèi kōng"
-
-#~ msgid "string index out of range"
-#~ msgstr "zìfú chuàn suǒyǐn chāochū fànwéi"
-
-#~ msgid "string indices must be integers, not %s"
-#~ msgstr "zìfú chuàn zhǐshù bìxū shì zhěngshù, ér bùshì %s"
-
-#~ msgid "struct: index out of range"
-#~ msgstr "jiégòu: suǒyǐn chāochū fànwéi"
-
-#, fuzzy
-#~ msgid "unknown format code '%c' for object of type '%s'"
-#~ msgstr "lèixíng '%s' duìxiàng wèizhī de géshì dàimǎ '%c'"
-
-#~ msgid "unsupported type for %q: '%s'"
-#~ msgstr "bù zhīchí de lèixíng %q: '%s'"
-
-#~ msgid "unsupported types for %q: '%s', '%s'"
-#~ msgstr "bù zhīchí de lèixíng wèi %q: '%s', '%s'"
-
#~ msgid "Address is not %d bytes long or is in wrong format"
#~ msgstr "Dìzhǐ bùshì %d zì jié zhǎng, huòzhě géshì cuòwù"
diff --git a/main.c b/main.c
index d206d4f16..fb73b09b1 100755
--- a/main.c
+++ b/main.c
@@ -282,7 +282,7 @@ bool run_code_py(safe_mode_t safe_mode) {
}
}
- // Wait for connection or character.
+ // Display a different completion message if the user has no USB attached (cannot save files)
if (!serial_connected_at_start) {
serial_write_compressed(translate("\nCode done running. Waiting for reload.\n"));
}
diff --git a/ports/atmel-samd/Makefile b/ports/atmel-samd/Makefile
index 25ab2c4aa..65542354e 100644
--- a/ports/atmel-samd/Makefile
+++ b/ports/atmel-samd/Makefile
@@ -361,7 +361,7 @@ OBJ += $(addprefix $(BUILD)/, $(SRC_S:.s=.o))
OBJ += $(addprefix $(BUILD)/, $(SRC_MOD:.c=.o))
SRC_QSTR += $(HEADER_BUILD)/sdiodata.h
-$(HEADER_BUILD)/sdiodata.h: $(TOP)/tools/mksdiodata.py | $(HEADER_BUILD)
+$(HEADER_BUILD)/sdiodata.h: tools/mksdiodata.py | $(HEADER_BUILD)
$(Q)$(PYTHON3) $< > $@
SRC_QSTR += $(SRC_C) $(SRC_SUPERVISOR) $(SRC_COMMON_HAL_EXPANDED) $(SRC_SHARED_MODULE_EXPANDED)
diff --git a/tools/mksdiodata.py b/ports/atmel-samd/tools/mksdiodata.py
index 0cce3819f..0cce3819f 100755
--- a/tools/mksdiodata.py
+++ b/ports/atmel-samd/tools/mksdiodata.py
diff --git a/ports/esp32s2/Makefile b/ports/esp32s2/Makefile
index 55db73604..19b89a13a 100644
--- a/ports/esp32s2/Makefile
+++ b/ports/esp32s2/Makefile
@@ -171,6 +171,7 @@ SRC_C += \
lib/utils/stdout_helpers.c \
lib/utils/sys_stdio_mphal.c \
peripherals/pins.c \
+ peripherals/rmt.c \
supervisor/shared/memory.c
ifneq ($(USB),FALSE)
diff --git a/ports/esp32s2/boards/espressif_saola_1_wroom/mpconfigboard.h b/ports/esp32s2/boards/espressif_saola_1_wroom/mpconfigboard.h
index 78652e215..a94f10ea4 100644
--- a/ports/esp32s2/boards/espressif_saola_1_wroom/mpconfigboard.h
+++ b/ports/esp32s2/boards/espressif_saola_1_wroom/mpconfigboard.h
@@ -29,4 +29,6 @@
#define MICROPY_HW_BOARD_NAME "Saola 1 w/Wroom"
#define MICROPY_HW_MCU_NAME "ESP32S2"
+#define MICROPY_HW_NEOPIXEL (&pin_GPIO18)
+
#define AUTORESET_DELAY_MS 500
diff --git a/ports/esp32s2/boards/espressif_saola_1_wroom/mpconfigboard.mk b/ports/esp32s2/boards/espressif_saola_1_wroom/mpconfigboard.mk
index 6e7627265..9c9ca6169 100644
--- a/ports/esp32s2/boards/espressif_saola_1_wroom/mpconfigboard.mk
+++ b/ports/esp32s2/boards/espressif_saola_1_wroom/mpconfigboard.mk
@@ -10,8 +10,6 @@ LONGINT_IMPL = MPZ
# so increase it to 32.
CFLAGS += -DCFG_TUD_TASK_QUEUE_SZ=32
-CIRCUITPY_NEOPIXEL_WRITE = 0
-
CIRCUITPY_ESP_FLASH_MODE=dio
CIRCUITPY_ESP_FLASH_FREQ=40m
CIRCUITPY_ESP_FLASH_SIZE=4MB
diff --git a/ports/esp32s2/boards/espressif_saola_1_wrover/mpconfigboard.h b/ports/esp32s2/boards/espressif_saola_1_wrover/mpconfigboard.h
index 7d08ccf7f..338186dc5 100644
--- a/ports/esp32s2/boards/espressif_saola_1_wrover/mpconfigboard.h
+++ b/ports/esp32s2/boards/espressif_saola_1_wrover/mpconfigboard.h
@@ -29,4 +29,6 @@
#define MICROPY_HW_BOARD_NAME "Saola 1 w/Wrover"
#define MICROPY_HW_MCU_NAME "ESP32S2"
+#define MICROPY_HW_NEOPIXEL (&pin_GPIO18)
+
#define AUTORESET_DELAY_MS 500
diff --git a/ports/esp32s2/boards/espressif_saola_1_wrover/mpconfigboard.mk b/ports/esp32s2/boards/espressif_saola_1_wrover/mpconfigboard.mk
index 1437df7f4..d5ff1c5ac 100644
--- a/ports/esp32s2/boards/espressif_saola_1_wrover/mpconfigboard.mk
+++ b/ports/esp32s2/boards/espressif_saola_1_wrover/mpconfigboard.mk
@@ -10,8 +10,6 @@ LONGINT_IMPL = MPZ
# so increase it to 32.
CFLAGS += -DCFG_TUD_TASK_QUEUE_SZ=32
-CIRCUITPY_NEOPIXEL_WRITE = 0
-
CIRCUITPY_ESP_FLASH_MODE=dio
CIRCUITPY_ESP_FLASH_FREQ=40m
CIRCUITPY_ESP_FLASH_SIZE=4MB
diff --git a/ports/esp32s2/boards/espressif_saola_1_wrover/pins.c b/ports/esp32s2/boards/espressif_saola_1_wrover/pins.c
index 1d4e2c4eb..0562d9331 100644
--- a/ports/esp32s2/boards/espressif_saola_1_wrover/pins.c
+++ b/ports/esp32s2/boards/espressif_saola_1_wrover/pins.c
@@ -42,5 +42,7 @@ STATIC const mp_rom_map_elem_t board_global_dict_table[] = {
{ MP_ROM_QSTR(MP_QSTR_IO44), MP_ROM_PTR(&pin_GPIO44) },
{ MP_ROM_QSTR(MP_QSTR_IO45), MP_ROM_PTR(&pin_GPIO45) },
{ MP_ROM_QSTR(MP_QSTR_IO46), MP_ROM_PTR(&pin_GPIO46) },
+
+ { MP_ROM_QSTR(MP_QSTR_NEOPIXEL), MP_ROM_PTR(&pin_GPIO18) },
};
MP_DEFINE_CONST_DICT(board_module_globals, board_global_dict_table);
diff --git a/ports/esp32s2/boards/unexpectedmaker_feathers2/mpconfigboard.mk b/ports/esp32s2/boards/unexpectedmaker_feathers2/mpconfigboard.mk
index ea3484d2f..294736d17 100644
--- a/ports/esp32s2/boards/unexpectedmaker_feathers2/mpconfigboard.mk
+++ b/ports/esp32s2/boards/unexpectedmaker_feathers2/mpconfigboard.mk
@@ -4,7 +4,6 @@ USB_PRODUCT = "FeatherS2"
USB_MANUFACTURER = "UnexpectedMaker"
USB_DEVICES = "CDC,MSC,HID"
-
INTERNAL_FLASH_FILESYSTEM = 1
LONGINT_IMPL = MPZ
@@ -12,8 +11,6 @@ LONGINT_IMPL = MPZ
# so increase it to 32.
CFLAGS += -DCFG_TUD_TASK_QUEUE_SZ=32
-CIRCUITPY_NEOPIXEL_WRITE = 0
-
CIRCUITPY_ESP_FLASH_MODE=qio
CIRCUITPY_ESP_FLASH_FREQ=40m
CIRCUITPY_ESP_FLASH_SIZE=16MB
diff --git a/ports/esp32s2/common-hal/microcontroller/Pin.c b/ports/esp32s2/common-hal/microcontroller/Pin.c
index 5a059f0bb..03a83cfe6 100644
--- a/ports/esp32s2/common-hal/microcontroller/Pin.c
+++ b/ports/esp32s2/common-hal/microcontroller/Pin.c
@@ -26,12 +26,18 @@
*/
#include "shared-bindings/microcontroller/Pin.h"
+#include "shared-bindings/digitalio/DigitalInOut.h"
+#include "supervisor/shared/rgb_led_status.h"
#include "py/mphal.h"
#include "esp-idf/components/driver/include/driver/gpio.h"
#include "esp-idf/components/soc/include/hal/gpio_hal.h"
+#ifdef MICROPY_HW_NEOPIXEL
+bool neopixel_in_use;
+#endif
+
STATIC uint32_t never_reset_pins[2];
STATIC uint32_t in_use[2];
@@ -50,6 +56,14 @@ void common_hal_never_reset_pin(const mcu_pin_obj_t* pin) {
void reset_pin_number(gpio_num_t pin_number) {
never_reset_pins[pin_number / 32] &= ~(1 << pin_number % 32);
in_use[pin_number / 32] &= ~(1 << pin_number % 32);
+
+ #ifdef MICROPY_HW_NEOPIXEL
+ if (pin_number == MICROPY_HW_NEOPIXEL->number) {
+ neopixel_in_use = false;
+ rgb_led_status_init();
+ return;
+ }
+ #endif
}
void common_hal_reset_pin(const mcu_pin_obj_t* pin) {
@@ -69,13 +83,32 @@ void reset_all_pins(void) {
}
in_use[0] = 0;
in_use[1] = 0;
+
+ #ifdef MICROPY_HW_NEOPIXEL
+ neopixel_in_use = false;
+ #endif
}
void claim_pin(const mcu_pin_obj_t* pin) {
in_use[pin->number / 32] |= (1 << pin->number % 32);
+ #ifdef MICROPY_HW_NEOPIXEL
+ if (pin == MICROPY_HW_NEOPIXEL) {
+ neopixel_in_use = true;
+ }
+ #endif
+}
+
+void common_hal_mcu_pin_claim(const mcu_pin_obj_t* pin) {
+ claim_pin(pin);
}
bool pin_number_is_free(gpio_num_t pin_number) {
+ #ifdef MICROPY_HW_NEOPIXEL
+ if (pin_number == MICROPY_HW_NEOPIXEL->number) {
+ return !neopixel_in_use;
+ }
+ #endif
+
uint8_t offset = pin_number / 32;
uint8_t mask = 1 << pin_number % 32;
return (never_reset_pins[offset] & mask) == 0 && (in_use[offset] & mask) == 0;
diff --git a/ports/esp32s2/common-hal/microcontroller/Pin.h b/ports/esp32s2/common-hal/microcontroller/Pin.h
index 19985bda6..f6c008703 100644
--- a/ports/esp32s2/common-hal/microcontroller/Pin.h
+++ b/ports/esp32s2/common-hal/microcontroller/Pin.h
@@ -34,6 +34,10 @@
extern bool apa102_mosi_in_use;
extern bool apa102_sck_in_use;
+#ifdef MICROPY_HW_NEOPIXEL
+extern bool neopixel_in_use;
+#endif
+
void reset_all_pins(void);
// reset_pin_number takes the pin number instead of the pointer so that objects don't
// need to store a full pointer.
diff --git a/ports/esp32s2/common-hal/neopixel_write/__init__.c b/ports/esp32s2/common-hal/neopixel_write/__init__.c
index a9b42fc96..1fc976ec3 100644
--- a/ports/esp32s2/common-hal/neopixel_write/__init__.c
+++ b/ports/esp32s2/common-hal/neopixel_write/__init__.c
@@ -3,7 +3,7 @@
*
* The MIT License (MIT)
*
- * Copyright (c) 2018 hathach for Adafruit Industries
+ * Copyright (c) 2020 Lucian Copeland for Adafruit Industries
*
* Permission is hereby granted, free of charge, to any person obtaining a copy
* of this software and associated documentation files (the "Software"), to deal
@@ -24,10 +24,102 @@
* THE SOFTWARE.
*/
+/* Uses code from Espressif RGB LED Strip demo and drivers
+ * Copyright 2015-2020 Espressif Systems (Shanghai) PTE LTD
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
#include "py/mphal.h"
+#include "py/runtime.h"
#include "shared-bindings/neopixel_write/__init__.h"
+#include "driver/rmt.h"
+#include "rmt.h"
+
+#define WS2812_T0H_NS (350)
+#define WS2812_T0L_NS (1000)
+#define WS2812_T1H_NS (1000)
+#define WS2812_T1L_NS (350)
+#define WS2812_RESET_US (280)
+
+static uint32_t ws2812_t0h_ticks = 0;
+static uint32_t ws2812_t1h_ticks = 0;
+static uint32_t ws2812_t0l_ticks = 0;
+static uint32_t ws2812_t1l_ticks = 0;
+
+static void IRAM_ATTR ws2812_rmt_adapter(const void *src, rmt_item32_t *dest, size_t src_size,
+ size_t wanted_num, size_t *translated_size, size_t *item_num)
+{
+ if (src == NULL || dest == NULL) {
+ *translated_size = 0;
+ *item_num = 0;
+ return;
+ }
+ const rmt_item32_t bit0 = {{{ ws2812_t0h_ticks, 1, ws2812_t0l_ticks, 0 }}}; //Logical 0
+ const rmt_item32_t bit1 = {{{ ws2812_t1h_ticks, 1, ws2812_t1l_ticks, 0 }}}; //Logical 1
+ size_t size = 0;
+ size_t num = 0;
+ uint8_t *psrc = (uint8_t *)src;
+ rmt_item32_t *pdest = dest;
+ while (size < src_size && num < wanted_num) {
+ for (int i = 0; i < 8; i++) {
+ // MSB first
+ if (*psrc & (1 << (7 - i))) {
+ pdest->val = bit1.val;
+ } else {
+ pdest->val = bit0.val;
+ }
+ num++;
+ pdest++;
+ }
+ size++;
+ psrc++;
+ }
+ *translated_size = size;
+ *item_num = num;
+}
void common_hal_neopixel_write (const digitalio_digitalinout_obj_t* digitalinout, uint8_t *pixels, uint32_t numBytes) {
- (void)digitalinout;
- (void)numBytes;
+ // Reserve channel
+ uint8_t number = digitalinout->pin->number;
+ rmt_channel_t channel = esp32s2_peripherals_find_and_reserve_rmt();
+
+ // Configure Channel
+ rmt_config_t config = RMT_DEFAULT_CONFIG_TX(number, channel);
+ config.clk_div = 2; // set counter clock to 40MHz
+ rmt_config(&config);
+ rmt_driver_install(config.channel, 0, 0);
+
+ // Convert NS timings to ticks
+ uint32_t counter_clk_hz = 0;
+ if (rmt_get_counter_clock(config.channel, &counter_clk_hz) != ESP_OK) {
+ mp_raise_RuntimeError(translate("Could not retrieve clock"));
+ }
+ float ratio = (float)counter_clk_hz / 1e9;
+ ws2812_t0h_ticks = (uint32_t)(ratio * WS2812_T0H_NS);
+ ws2812_t0l_ticks = (uint32_t)(ratio * WS2812_T0L_NS);
+ ws2812_t1h_ticks = (uint32_t)(ratio * WS2812_T1H_NS);
+ ws2812_t1l_ticks = (uint32_t)(ratio * WS2812_T1L_NS);
+
+ // Initialize automatic timing translator
+ rmt_translator_init(config.channel, ws2812_rmt_adapter);
+
+ // Write and wait to finish
+ if(rmt_write_sample(config.channel, pixels, (size_t)numBytes, true) != ESP_OK) {
+ mp_raise_RuntimeError(translate("Input/output error"));
+ }
+ rmt_wait_tx_done(config.channel, pdMS_TO_TICKS(100));
+
+ // Free channel again
+ esp32s2_peripherals_free_rmt(config.channel);
}
diff --git a/ports/esp32s2/common-hal/pulseio/PWMOut.c b/ports/esp32s2/common-hal/pulseio/PWMOut.c
index c4f5e18dd..0ac42852a 100644
--- a/ports/esp32s2/common-hal/pulseio/PWMOut.c
+++ b/ports/esp32s2/common-hal/pulseio/PWMOut.c
@@ -3,8 +3,7 @@
*
* The MIT License (MIT)
*
- * Copyright (c) 2019 Lucian Copeland for Adafruit Industries
- * Uses code from Micropython, Copyright (c) 2013-2016 Damien P. George
+ * Copyright (c) 2020 Lucian Copeland for Adafruit Industries
*
* Permission is hereby granted, free of charge, to any person obtaining a copy
* of this software and associated documentation files (the "Software"), to deal
@@ -33,6 +32,7 @@
#define INDEX_EMPTY 0xFF
+STATIC bool not_first_reset = false;
STATIC uint32_t reserved_timer_freq[LEDC_TIMER_MAX];
STATIC uint8_t reserved_channels[LEDC_CHANNEL_MAX];
STATIC bool never_reset_tim[LEDC_TIMER_MAX];
@@ -40,17 +40,22 @@ STATIC bool never_reset_chan[LEDC_CHANNEL_MAX];
void pwmout_reset(void) {
for (size_t i = 0; i < LEDC_CHANNEL_MAX; i++ ) {
- ledc_stop(LEDC_LOW_SPEED_MODE, i, 0);
+ if (reserved_channels[i] != INDEX_EMPTY && not_first_reset) {
+ ledc_stop(LEDC_LOW_SPEED_MODE, i, 0);
+ }
if (!never_reset_chan[i]) {
reserved_channels[i] = INDEX_EMPTY;
}
}
for (size_t i = 0; i < LEDC_TIMER_MAX; i++ ) {
- ledc_timer_rst(LEDC_LOW_SPEED_MODE, i);
+ if (reserved_timer_freq[i]) {
+ ledc_timer_rst(LEDC_LOW_SPEED_MODE, i);
+ }
if (!never_reset_tim[i]) {
reserved_timer_freq[i] = 0;
}
}
+ not_first_reset = true;
}
pwmout_result_t common_hal_pulseio_pwmout_construct(pulseio_pwmout_obj_t* self,
@@ -158,7 +163,10 @@ void common_hal_pulseio_pwmout_deinit(pulseio_pwmout_obj_t* self) {
if (common_hal_pulseio_pwmout_deinited(self)) {
return;
}
- ledc_stop(LEDC_LOW_SPEED_MODE, self->chan_handle.channel, 0);
+
+ if (reserved_channels[self->chan_handle.channel] != INDEX_EMPTY) {
+ ledc_stop(LEDC_LOW_SPEED_MODE, self->chan_handle.channel, 0);
+ }
// Search if any other channel is using the timer
bool taken = false;
for (size_t i =0; i < LEDC_CHANNEL_MAX; i++) {
@@ -168,7 +176,9 @@ void common_hal_pulseio_pwmout_deinit(pulseio_pwmout_obj_t* self) {
}
// Variable frequency means there's only one channel on the timer
if (!taken || self->variable_frequency) {
- ledc_timer_rst(LEDC_LOW_SPEED_MODE, self->tim_handle.timer_num);
+ if (reserved_timer_freq[self->tim_handle.timer_num] != 0) {
+ ledc_timer_rst(LEDC_LOW_SPEED_MODE, self->tim_handle.timer_num);
+ }
reserved_timer_freq[self->tim_handle.timer_num] = 0;
}
reset_pin_number(self->pin_number);
diff --git a/ports/esp32s2/mpconfigport.mk b/ports/esp32s2/mpconfigport.mk
index c2d21e084..a7873aa46 100644
--- a/ports/esp32s2/mpconfigport.mk
+++ b/ports/esp32s2/mpconfigport.mk
@@ -12,26 +12,21 @@ USB_SERIAL_NUMBER_LENGTH = 12
# Longints can be implemented as mpz, as longlong, or not
LONGINT_IMPL = MPZ
-CIRCUITPY_FULL_BUILD = 0
+# These modules are implemented in ports/<port>/common-hal:
CIRCUITPY_ANALOGIO = 0
+CIRCUITPY_NVM = 0
CIRCUITPY_AUDIOBUSIO = 0
CIRCUITPY_AUDIOIO = 0
-CIRCUITPY_BITBANGIO = 1
-CIRCUITPY_BOARD = 1
-CIRCUITPY_DIGITALIO = 1
-CIRCUITPY_BUSIO = 1
-CIRCUITPY_DISPLAYIO = 1
-CIRCUITPY_FREQUENCYIO = 0
-CIRCUITPY_I2CPERIPHERAL = 0
-CIRCUITPY_MICROCONTROLLER = 1
-CIRCUITPY_NVM = 0
-CIRCUITPY_PULSEIO = 1
CIRCUITPY_ROTARYIO = 0
CIRCUITPY_RTC = 0
-CIRCUITPY_TOUCHIO = 0
+CIRCUITPY_FREQUENCYIO = 0
+CIRCUITPY_I2CPERIPHERAL = 0
+CIRCUITPY_COUNTIO = 0
-# Enable USB HID support
-CIRCUITPY_USB_HID = 1
-CIRCUITPY_USB_MIDI = 0
+# These modules are implemented in shared-module/ - they can be included in
+# any port once their prerequisites in common-hal are complete.
+CIRCUITPY_RANDOM = 0 # Requires OS
+CIRCUITPY_USB_MIDI = 0 # Requires USB
+CIRCUITPY_ULAB = 0 # No requirements, but takes extra flash
CIRCUITPY_MODULE ?= none
diff --git a/ports/esp32s2/peripherals/rmt.c b/ports/esp32s2/peripherals/rmt.c
new file mode 100644
index 000000000..f17957c1c
--- /dev/null
+++ b/ports/esp32s2/peripherals/rmt.c
@@ -0,0 +1,46 @@
+/*
+ * This file is part of the Micro Python project, http://micropython.org/
+ *
+ * The MIT License (MIT)
+ *
+ * Copyright (c) 2020 Lucian Copeland for Adafruit Industries
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining a copy
+ * of this software and associated documentation files (the "Software"), to deal
+ * in the Software without restriction, including without limitation the rights
+ * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+ * copies of the Software, and to permit persons to whom the Software is
+ * furnished to do so, subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice shall be included in
+ * all copies or substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+ * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+ * THE SOFTWARE.
+ */
+
+#include "rmt.h"
+#include "py/runtime.h"
+
+bool rmt_reserved_channels[RMT_CHANNEL_MAX];
+
+rmt_channel_t esp32s2_peripherals_find_and_reserve_rmt(void) {
+ for (size_t i = 0; i < RMT_CHANNEL_MAX; i++) {
+ if (!rmt_reserved_channels[i]) {
+ rmt_reserved_channels[i] = true;
+ return i;
+ }
+ }
+ mp_raise_RuntimeError(translate("All timers in use"));
+ return false;
+}
+
+void esp32s2_peripherals_free_rmt(rmt_channel_t chan) {
+ rmt_reserved_channels[chan] = false;
+ rmt_driver_uninstall(chan);
+}
diff --git a/ports/esp32s2/peripherals/rmt.h b/ports/esp32s2/peripherals/rmt.h
new file mode 100644
index 000000000..4741a5bc5
--- /dev/null
+++ b/ports/esp32s2/peripherals/rmt.h
@@ -0,0 +1,37 @@
+/*
+ * This file is part of the Micro Python project, http://micropython.org/
+ *
+ * The MIT License (MIT)
+ *
+ * Copyright (c) 2020 Lucian Copeland for Adafruit Industries
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining a copy
+ * of this software and associated documentation files (the "Software"), to deal
+ * in the Software without restriction, including without limitation the rights
+ * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+ * copies of the Software, and to permit persons to whom the Software is
+ * furnished to do so, subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice shall be included in
+ * all copies or substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+ * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+ * THE SOFTWARE.
+ */
+
+#ifndef MICROPY_INCLUDED_ESP32S2_PERIPHERALS_RMT_H
+#define MICROPY_INCLUDED_ESP32S2_PERIPHERALS_RMT_H
+
+#include "py/mphal.h"
+#include "driver/rmt.h"
+#include <stdint.h>
+
+rmt_channel_t esp32s2_peripherals_find_and_reserve_rmt(void);
+void esp32s2_peripherals_free_rmt(rmt_channel_t chan);
+
+#endif
diff --git a/ports/nrf/boards/makerdiary_m60_keyboard/mpconfigboard.h b/ports/nrf/boards/makerdiary_m60_keyboard/mpconfigboard.h
index 086718089..4fb6049c5 100644
--- a/ports/nrf/boards/makerdiary_m60_keyboard/mpconfigboard.h
+++ b/ports/nrf/boards/makerdiary_m60_keyboard/mpconfigboard.h
@@ -30,9 +30,10 @@
#define MICROPY_HW_BOARD_NAME "Makerdiary M60 Keyboard"
#define MICROPY_HW_MCU_NAME "nRF52840"
-#define CP_RGB_STATUS_R (&pin_P0_30)
-#define CP_RGB_STATUS_G (&pin_P0_29)
-#define CP_RGB_STATUS_B (&pin_P0_31)
+// RGB LEDs use PWM peripheral, avoid using them to save energy
+// #define CP_RGB_STATUS_R (&pin_P0_30)
+// #define CP_RGB_STATUS_G (&pin_P0_29)
+// #define CP_RGB_STATUS_B (&pin_P0_31)
#define MICROPY_QSPI_DATA0 NRF_GPIO_PIN_MAP(1, 10)
#define MICROPY_QSPI_DATA1 NRF_GPIO_PIN_MAP(1, 14)
diff --git a/ports/nrf/supervisor/port.c b/ports/nrf/supervisor/port.c
index e681e6825..87a4d7396 100644
--- a/ports/nrf/supervisor/port.c
+++ b/ports/nrf/supervisor/port.c
@@ -65,6 +65,10 @@
#include "common-hal/audiopwmio/PWMAudioOut.h"
#endif
+#if defined(MICROPY_QSPI_CS)
+extern void qspi_disable(void);
+#endif
+
static void power_warning_handler(void) {
reset_into_safe_mode(BROWNOUT);
}
@@ -295,6 +299,10 @@ void port_interrupt_after_ticks(uint32_t ticks) {
}
void port_sleep_until_interrupt(void) {
+#if defined(MICROPY_QSPI_CS)
+ qspi_disable();
+#endif
+
// Clear the FPU interrupt because it can prevent us from sleeping.
if (NVIC_GetPendingIRQ(FPU_IRQn)) {
__set_FPSCR(__get_FPSCR() & ~(0x9f));
diff --git a/ports/nrf/supervisor/qspi_flash.c b/ports/nrf/supervisor/qspi_flash.c
index 90260b091..5ab56c6bc 100644
--- a/ports/nrf/supervisor/qspi_flash.c
+++ b/ports/nrf/supervisor/qspi_flash.c
@@ -38,7 +38,44 @@
#include "supervisor/shared/external_flash/common_commands.h"
#include "supervisor/shared/external_flash/qspi_flash.h"
+// When USB is disconnected, disable QSPI in sleep mode to save energy
+void qspi_disable(void)
+{
+ // If VBUS is detected, no need to disable QSPI
+ if (NRF_QSPI->ENABLE && !(NRF_POWER->USBREGSTATUS & POWER_USBREGSTATUS_VBUSDETECT_Msk)) {
+ // Keep CS high when QSPI is diabled
+ nrf_gpio_cfg_output(MICROPY_QSPI_CS);
+ nrf_gpio_pin_write(MICROPY_QSPI_CS, 1);
+
+ // Workaround to disable QSPI according to nRF52840 Revision 1 Errata V1.4 - 3.8
+ NRF_QSPI->TASKS_DEACTIVATE = 1;
+ *(volatile uint32_t *)0x40029054 = 1;
+ NRF_QSPI->ENABLE = 0;
+ }
+}
+
+void qspi_enable(void)
+{
+ if (NRF_QSPI->ENABLE) {
+ return;
+ }
+
+ nrf_qspi_enable(NRF_QSPI);
+
+ nrf_qspi_event_clear(NRF_QSPI, NRF_QSPI_EVENT_READY);
+ nrf_qspi_task_trigger(NRF_QSPI, NRF_QSPI_TASK_ACTIVATE);
+
+ uint32_t remaining_attempts = 100;
+ do {
+ if (nrf_qspi_event_check(NRF_QSPI, NRF_QSPI_EVENT_READY)) {
+ break;
+ }
+ NRFX_DELAY_US(10);
+ } while (--remaining_attempts);
+}
+
bool spi_flash_command(uint8_t command) {
+ qspi_enable();
nrf_qspi_cinstr_conf_t cinstr_cfg = {
.opcode = command,
.length = 1,
@@ -51,6 +88,7 @@ bool spi_flash_command(uint8_t command) {
}
bool spi_flash_read_command(uint8_t command, uint8_t* response, uint32_t length) {
+ qspi_enable();
nrf_qspi_cinstr_conf_t cinstr_cfg = {
.opcode = command,
.length = length + 1,
@@ -64,6 +102,7 @@ bool spi_flash_read_command(uint8_t command, uint8_t* response, uint32_t length)
}
bool spi_flash_write_command(uint8_t command, uint8_t* data, uint32_t length) {
+ qspi_enable();
nrf_qspi_cinstr_conf_t cinstr_cfg = {
.opcode = command,
.length = length + 1,
@@ -76,6 +115,7 @@ bool spi_flash_write_command(uint8_t command, uint8_t* data, uint32_t length) {
}
bool spi_flash_sector_command(uint8_t command, uint32_t address) {
+ qspi_enable();
if (command != CMD_SECTOR_ERASE) {
return false;
}
@@ -83,6 +123,7 @@ bool spi_flash_sector_command(uint8_t command, uint32_t address) {
}
bool spi_flash_write_data(uint32_t address, uint8_t* data, uint32_t length) {
+ qspi_enable();
// TODO: In theory, this also needs to handle unaligned data and
// non-multiple-of-4 length. (in practice, I don't think the fat layer
// generates such writes)
@@ -90,6 +131,7 @@ bool spi_flash_write_data(uint32_t address, uint8_t* data, uint32_t length) {
}
bool spi_flash_read_data(uint32_t address, uint8_t* data, uint32_t length) {
+ qspi_enable();
int misaligned = ((intptr_t)data) & 3;
// If the data is misaligned, we need to read 4 bytes
// into an aligned buffer, and then copy 1, 2, or 3 bytes from the aligned
diff --git a/ports/stm/boards/feather_stm32f405_express/pins.c b/ports/stm/boards/feather_stm32f405_express/pins.c
index ebc8fa337..571076c33 100644
--- a/ports/stm/boards/feather_stm32f405_express/pins.c
+++ b/ports/stm/boards/feather_stm32f405_express/pins.c
@@ -1,5 +1,17 @@
+#include "py/objtuple.h"
#include "shared-bindings/board/__init__.h"
+STATIC const mp_rom_obj_tuple_t sdio_data_tuple = {
+ {&mp_type_tuple},
+ 4,
+ {
+ MP_ROM_PTR(&pin_PC08),
+ MP_ROM_PTR(&pin_PC09),
+ MP_ROM_PTR(&pin_PC10),
+ MP_ROM_PTR(&pin_PC11),
+ }
+};
+
STATIC const mp_rom_map_elem_t board_module_globals_table[] = {
{ MP_ROM_QSTR(MP_QSTR_A0), MP_ROM_PTR(&pin_PA04) },
{ MP_ROM_QSTR(MP_QSTR_A1), MP_ROM_PTR(&pin_PA05) },
@@ -31,5 +43,9 @@ STATIC const mp_rom_map_elem_t board_module_globals_table[] = {
{ MP_ROM_QSTR(MP_QSTR_I2C), MP_ROM_PTR(&board_i2c_obj) },
{ MP_ROM_QSTR(MP_QSTR_SPI), MP_ROM_PTR(&board_spi_obj) },
{ MP_ROM_QSTR(MP_QSTR_UART), MP_ROM_PTR(&board_uart_obj) },
+
+ { MP_ROM_QSTR(MP_QSTR_SDIO_CLOCK), MP_ROM_PTR(&pin_PC12) },
+ { MP_ROM_QSTR(MP_QSTR_SDIO_COMMAND), MP_ROM_PTR(&pin_PD02) },
+ { MP_ROM_QSTR(MP_QSTR_SDIO_DATA), MP_ROM_PTR(&sdio_data_tuple) },
};
MP_DEFINE_CONST_DICT(board_module_globals, board_module_globals_table);
diff --git a/ports/stm/common-hal/busio/I2C.c b/ports/stm/common-hal/busio/I2C.c
index b05d28c85..de69da211 100644
--- a/ports/stm/common-hal/busio/I2C.c
+++ b/ports/stm/common-hal/busio/I2C.c
@@ -112,7 +112,7 @@ void common_hal_busio_i2c_construct(busio_i2c_obj_t *self,
if (i2c_taken) {
mp_raise_ValueError(translate("Hardware busy, try alternative pins"));
} else {
- mp_raise_ValueError(translate("Invalid I2C pin selection"));
+ mp_raise_ValueError_varg(translate("Invalid %q pin selection"), MP_QSTR_I2C);
}
}
diff --git a/ports/stm/common-hal/busio/SPI.c b/ports/stm/common-hal/busio/SPI.c
index 15c746b62..0354d64ad 100644
--- a/ports/stm/common-hal/busio/SPI.c
+++ b/ports/stm/common-hal/busio/SPI.c
@@ -169,7 +169,7 @@ STATIC int check_pins(busio_spi_obj_t *self,
if (spi_taken) {
mp_raise_ValueError(translate("Hardware busy, try alternative pins"));
} else {
- mp_raise_ValueError(translate("Invalid SPI pin selection"));
+ mp_raise_ValueError_varg(translate("Invalid %q pin selection"), MP_QSTR_SPI);
}
}
diff --git a/ports/stm/common-hal/busio/UART.c b/ports/stm/common-hal/busio/UART.c
index 08dae7e42..0cd906181 100644
--- a/ports/stm/common-hal/busio/UART.c
+++ b/ports/stm/common-hal/busio/UART.c
@@ -58,7 +58,7 @@ STATIC USART_TypeDef * assign_uart_or_throw(busio_uart_obj_t* self, bool pin_eva
if (uart_taken) {
mp_raise_ValueError(translate("Hardware in use, try alternative pins"));
} else {
- mp_raise_ValueError(translate("Invalid UART pin selection"));
+ mp_raise_ValueError_varg(translate("Invalid %q pin selection"), MP_QSTR_UART);
}
}
}
diff --git a/ports/stm/common-hal/sdioio/SDCard.c b/ports/stm/common-hal/sdioio/SDCard.c
new file mode 100644
index 000000000..5f6010f01
--- /dev/null
+++ b/ports/stm/common-hal/sdioio/SDCard.c
@@ -0,0 +1,327 @@
+/*
+ * This file is part of the MicroPython project, http://micropython.org/
+ *
+ * The MIT License (MIT)
+ *
+ * Copyright (c) 2020 Jeff Epler for Adafruit Industries
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining a copy
+ * of this software and associated documentation files (the "Software"), to deal
+ * in the Software without restriction, including without limitation the rights
+ * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+ * copies of the Software, and to permit persons to whom the Software is
+ * furnished to do so, subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice shall be included in
+ * all copies or substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+ * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+ * THE SOFTWARE.
+ */
+#include <stdbool.h>
+
+#include "shared-bindings/sdioio/SDCard.h"
+#include "py/mperrno.h"
+#include "py/runtime.h"
+
+#include "shared-bindings/microcontroller/__init__.h"
+#include "shared-bindings/util.h"
+#include "boards/board.h"
+#include "supervisor/shared/translate.h"
+#include "common-hal/microcontroller/Pin.h"
+#include "shared-bindings/microcontroller/Pin.h"
+
+STATIC bool reserved_sdio[MP_ARRAY_SIZE(mcu_sdio_banks)];
+STATIC bool never_reset_sdio[MP_ARRAY_SIZE(mcu_sdio_banks)];
+
+STATIC const mcu_periph_obj_t *find_pin_function(const mcu_periph_obj_t *table, size_t sz, const mcu_pin_obj_t *pin, int periph_index) {
+ for(size_t i = 0; i<sz; i++, table++) {
+ if(periph_index == table->periph_index && pin == table->pin ) {
+ return table;
+ }
+ }
+ return NULL;
+}
+
+//match pins to SDIO objects
+STATIC int check_pins(sdioio_sdcard_obj_t *self,
+ const mcu_pin_obj_t * clock, const mcu_pin_obj_t * command,
+ uint8_t num_data, mcu_pin_obj_t ** data) {
+ bool sdio_taken = false;
+
+ const uint8_t sdio_clock_len = MP_ARRAY_SIZE(mcu_sdio_clock_list);
+ const uint8_t sdio_command_len = MP_ARRAY_SIZE(mcu_sdio_command_list);
+ const uint8_t sdio_data0_len = MP_ARRAY_SIZE(mcu_sdio_data0_list);
+ const uint8_t sdio_data1_len = MP_ARRAY_SIZE(mcu_sdio_data1_list);
+ const uint8_t sdio_data2_len = MP_ARRAY_SIZE(mcu_sdio_data2_list);
+ const uint8_t sdio_data3_len = MP_ARRAY_SIZE(mcu_sdio_data3_list);
+
+
+ // Loop over each possibility for clock. Check whether all other pins can
+ // be used on the same peripheral
+ for (uint i = 0; i < sdio_clock_len; i++) {
+ const mcu_periph_obj_t *mcu_sdio_clock = &mcu_sdio_clock_list[i];
+ if (mcu_sdio_clock->pin != clock) {
+ continue;
+ }
+
+ int periph_index = mcu_sdio_clock->periph_index;
+
+ const mcu_periph_obj_t *mcu_sdio_command = NULL;
+ if (!(mcu_sdio_command = find_pin_function(mcu_sdio_command_list, sdio_command_len, command, periph_index))) {
+ continue;
+ }
+
+ const mcu_periph_obj_t *mcu_sdio_data0 = NULL;
+ if(!(mcu_sdio_data0 = find_pin_function(mcu_sdio_data0_list, sdio_data0_len, data[0], periph_index))) {
+ continue;
+ }
+
+ const mcu_periph_obj_t *mcu_sdio_data1 = NULL;
+ if(num_data > 1 && !(mcu_sdio_data1 = find_pin_function(mcu_sdio_data1_list, sdio_data1_len, data[1], periph_index))) {
+ continue;
+ }
+
+ const mcu_periph_obj_t *mcu_sdio_data2 = NULL;
+ if(num_data > 2 && !(mcu_sdio_data2 = find_pin_function(mcu_sdio_data2_list, sdio_data2_len, data[2], periph_index))) {
+ continue;
+ }
+
+ const mcu_periph_obj_t *mcu_sdio_data3 = NULL;
+ if(num_data > 3 && !(mcu_sdio_data3 = find_pin_function(mcu_sdio_data3_list, sdio_data3_len, data[3], periph_index))) {
+ continue;
+ }
+
+ if (reserved_sdio[periph_index-1]) {
+ sdio_taken = true;
+ continue;
+ }
+
+ self->clock = mcu_sdio_clock;
+ self->command = mcu_sdio_command;
+ self->data[0] = mcu_sdio_data0;
+ self->data[1] = mcu_sdio_data1;
+ self->data[2] = mcu_sdio_data2;
+ self->data[3] = mcu_sdio_data3;
+
+ return periph_index;
+ }
+
+ if (sdio_taken) {
+ mp_raise_ValueError(translate("Hardware busy, try alternative pins"));
+ } else {
+ mp_raise_ValueError_varg(translate("Invalid %q pin selection"), MP_QSTR_SDIO);
+ }
+}
+
+
+void common_hal_sdioio_sdcard_construct(sdioio_sdcard_obj_t *self,
+ const mcu_pin_obj_t * clock, const mcu_pin_obj_t * command,
+ uint8_t num_data, mcu_pin_obj_t ** data, uint32_t frequency) {
+
+ int periph_index = check_pins(self, clock, command, num_data, data);
+ SDIO_TypeDef * SDIOx = mcu_sdio_banks[periph_index - 1];
+
+ GPIO_InitTypeDef GPIO_InitStruct = {0};
+
+ /* Configure data pins */
+ for (int i=0; i<num_data; i++) {
+ GPIO_InitStruct.Pin = pin_mask(data[i]->number);
+ GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_VERY_HIGH;
+ GPIO_InitStruct.Mode = GPIO_MODE_AF_PP;
+ GPIO_InitStruct.Pull = GPIO_PULLUP;
+ GPIO_InitStruct.Alternate = self->data[i]->altfn_index;
+ HAL_GPIO_Init(pin_port(data[i]->port), &GPIO_InitStruct);
+ }
+
+ /* Configure command pin */
+ GPIO_InitStruct.Alternate = self->command->altfn_index;
+ GPIO_InitStruct.Pin = pin_mask(command->number);
+ HAL_GPIO_Init(pin_port(command->port), &GPIO_InitStruct);
+
+ /* Configure clock */
+ GPIO_InitStruct.Alternate = self->clock->altfn_index;
+ GPIO_InitStruct.Pin = pin_mask(clock->number);
+ HAL_GPIO_Init(pin_port(clock->port), &GPIO_InitStruct);
+
+ __HAL_RCC_SDIO_CLK_ENABLE();
+
+ self->handle.Init.ClockDiv = SDIO_TRANSFER_CLK_DIV;
+ self->handle.Init.ClockEdge = SDIO_CLOCK_EDGE_RISING;
+ self->handle.Init.ClockBypass = SDIO_CLOCK_BYPASS_DISABLE;
+ self->handle.Init.ClockPowerSave = SDIO_CLOCK_POWER_SAVE_DISABLE;
+ self->handle.Init.BusWide = SDIO_BUS_WIDE_1B;
+ self->handle.Init.HardwareFlowControl = SDIO_HARDWARE_FLOW_CONTROL_DISABLE;
+ self->handle.Instance = SDIOx;
+
+ HAL_StatusTypeDef r = HAL_SD_Init(&self->handle);
+ if (r != HAL_OK) {
+ mp_raise_ValueError_varg(translate("SDIO Init Error %d"), (int)r);
+ }
+
+ HAL_SD_CardInfoTypeDef info;
+ r = HAL_SD_GetCardInfo(&self->handle, &info);
+ if (r != HAL_OK) {
+ mp_raise_ValueError_varg(translate("SDIO GetCardInfo Error %d"), (int)r);
+ }
+
+ self->num_data = 1;
+ if (num_data == 4) {
+ if ((r = HAL_SD_ConfigWideBusOperation(&self->handle, SDIO_BUS_WIDE_4B)) == HAL_SD_ERROR_NONE) {
+ self->handle.Init.BusWide = SDIO_BUS_WIDE_4B;
+ self->num_data = 4;
+ } else {
+ }
+ }
+
+ self->capacity = info.BlockNbr * (info.BlockSize / 512);
+ self->frequency = 25000000;
+
+ reserved_sdio[periph_index - 1] = true;
+
+ common_hal_mcu_pin_claim(clock);
+ common_hal_mcu_pin_claim(command);
+ for (int i=0; i<num_data; i++) {
+ common_hal_mcu_pin_claim(data[i]);
+ }
+
+ return;
+}
+
+uint32_t common_hal_sdioio_sdcard_get_count(sdioio_sdcard_obj_t *self) {
+ return self->capacity;
+}
+
+uint32_t common_hal_sdioio_sdcard_get_frequency(sdioio_sdcard_obj_t *self) {
+ return self->frequency;
+}
+
+uint8_t common_hal_sdioio_sdcard_get_width(sdioio_sdcard_obj_t *self) {
+ return self->num_data;
+}
+
+STATIC void check_whole_block(mp_buffer_info_t *bufinfo) {
+ if (bufinfo->len % 512) {
+ mp_raise_ValueError(translate("Buffer must be a multiple of 512 bytes"));
+ }
+}
+
+STATIC void wait_write_complete(sdioio_sdcard_obj_t *self) {
+ if (self->state_programming) {
+ HAL_SD_CardStateTypedef st = HAL_SD_CARD_PROGRAMMING;
+ // This waits up to 60s for programming to complete. This seems like
+ // an extremely long time, but this is the timeout that micropython's
+ // implementation uses
+ for (int i=0; i < 60000 && st == HAL_SD_CARD_PROGRAMMING; i++) {
+ st = HAL_SD_GetCardState(&self->handle);
+ HAL_Delay(1);
+ };
+ self->state_programming = false;
+ }
+}
+
+STATIC void check_for_deinit(sdioio_sdcard_obj_t *self) {
+ if (common_hal_sdioio_sdcard_deinited(self)) {
+ raise_deinited_error();
+ }
+}
+
+int common_hal_sdioio_sdcard_writeblocks(sdioio_sdcard_obj_t *self, uint32_t start_block, mp_buffer_info_t *bufinfo) {
+ check_for_deinit(self);
+ check_whole_block(bufinfo);
+ wait_write_complete(self);
+ self->state_programming = true;
+ common_hal_mcu_disable_interrupts();
+ HAL_StatusTypeDef r = HAL_SD_WriteBlocks(&self->handle, bufinfo->buf, start_block, bufinfo->len / 512, 1000);
+ common_hal_mcu_enable_interrupts();
+ if (r != HAL_OK) {
+ return -EIO;
+ }
+ return 0;
+}
+
+int common_hal_sdioio_sdcard_readblocks(sdioio_sdcard_obj_t *self, uint32_t start_block, mp_buffer_info_t *bufinfo) {
+ check_for_deinit(self);
+ check_whole_block(bufinfo);
+ wait_write_complete(self);
+ common_hal_mcu_disable_interrupts();
+ HAL_StatusTypeDef r = HAL_SD_ReadBlocks(&self->handle, bufinfo->buf, start_block, bufinfo->len / 512, 1000);
+ common_hal_mcu_enable_interrupts();
+ if (r != HAL_OK) {
+ return -EIO;
+ }
+ return 0;
+}
+
+bool common_hal_sdioio_sdcard_configure(sdioio_sdcard_obj_t *self, uint32_t frequency, uint8_t bits) {
+ check_for_deinit(self);
+ return true;
+}
+
+bool common_hal_sdioio_sdcard_deinited(sdioio_sdcard_obj_t *self) {
+ return self->command == NULL;
+}
+
+STATIC void never_reset_mcu_periph(const mcu_periph_obj_t *periph) {
+ if (periph) {
+ never_reset_pin_number(periph->pin->port,periph->pin->number);
+ }
+}
+
+STATIC void reset_mcu_periph(const mcu_periph_obj_t *periph) {
+ if (periph) {
+ reset_pin_number(periph->pin->port,periph->pin->number);
+ }
+}
+
+void common_hal_sdioio_sdcard_deinit(sdioio_sdcard_obj_t *self) {
+ if (common_hal_sdioio_sdcard_deinited(self)) {
+ return;
+ }
+
+ reserved_sdio[self->command->periph_index - 1] = false;
+ never_reset_sdio[self->command->periph_index - 1] = false;
+
+ reset_mcu_periph(self->command);
+ self->command = NULL;
+
+ reset_mcu_periph(self->clock);
+ self->command = NULL;
+
+ for (size_t i=0; i<MP_ARRAY_SIZE(self->data); i++) {
+ reset_mcu_periph(self->data[i]);
+ self->data[i] = NULL;
+ }
+}
+
+void common_hal_sdioio_sdcard_never_reset(sdioio_sdcard_obj_t *self) {
+ if (common_hal_sdioio_sdcard_deinited(self)) {
+ return;
+ }
+
+ if (never_reset_sdio[self->command->periph_index] - 1) {
+ return;
+ }
+
+ never_reset_sdio[self->command->periph_index - 1] = true;
+
+ never_reset_mcu_periph(self->command);
+ never_reset_mcu_periph(self->clock);
+
+ for (size_t i=0; i<MP_ARRAY_SIZE(self->data); i++) {
+ never_reset_mcu_periph(self->data[i]);
+ }
+}
+
+void sdioio_reset() {
+ for (size_t i=0; i<MP_ARRAY_SIZE(reserved_sdio); i++) {
+ if (!never_reset_sdio[i]) {
+ reserved_sdio[i] = false;
+ }
+ }
+}
diff --git a/ports/stm/common-hal/sdioio/SDCard.h b/ports/stm/common-hal/sdioio/SDCard.h
new file mode 100644
index 000000000..b737b6939
--- /dev/null
+++ b/ports/stm/common-hal/sdioio/SDCard.h
@@ -0,0 +1,50 @@
+/*
+ * This file is part of the MicroPython project, http://micropython.org/
+ *
+ * The MIT License (MIT)
+ *
+ * Copyright (c) 2020 Jeff Epler for Adafruit Industries
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining a copy
+ * of this software and associated documentation files (the "Software"), to deal
+ * in the Software without restriction, including without limitation the rights
+ * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+ * copies of the Software, and to permit persons to whom the Software is
+ * furnished to do so, subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice shall be included in
+ * all copies or substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+ * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+ * THE SOFTWARE.
+ */
+
+#ifndef MICROPY_INCLUDED_STM32_COMMON_HAL_BUSIO_SDIO_H
+#define MICROPY_INCLUDED_STM32_COMMON_HAL_BUSIO_SDIO_H
+
+#include "common-hal/microcontroller/Pin.h"
+
+#include "peripherals/periph.h"
+
+#include "py/obj.h"
+
+typedef struct {
+ mp_obj_base_t base;
+ SD_HandleTypeDef handle;
+ uint8_t num_data:3, state_programming:1;
+ bool has_lock;
+ const mcu_periph_obj_t *command;
+ const mcu_periph_obj_t *clock;
+ const mcu_periph_obj_t *data[4];
+ uint32_t frequency;
+ uint32_t capacity;
+} sdioio_sdcard_obj_t;
+
+void sdioio_reset(void);
+
+#endif // MICROPY_INCLUDED_STM32_COMMON_HAL_BUSIO_SDIO_H
diff --git a/ports/stm/common-hal/sdioio/__init__.c b/ports/stm/common-hal/sdioio/__init__.c
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/ports/stm/common-hal/sdioio/__init__.c
diff --git a/ports/stm/common-hal/sdioio/__init__.h b/ports/stm/common-hal/sdioio/__init__.h
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/ports/stm/common-hal/sdioio/__init__.h
diff --git a/ports/stm/hal_conf/stm32_hal_conf.h b/ports/stm/hal_conf/stm32_hal_conf.h
index b78afc64b..c91be86fd 100644
--- a/ports/stm/hal_conf/stm32_hal_conf.h
+++ b/ports/stm/hal_conf/stm32_hal_conf.h
@@ -61,7 +61,7 @@
#define HAL_RTC_MODULE_ENABLED
// #define HAL_SAI_MODULE_ENABLED
// #define HAL_SDRAM_MODULE_ENABLED
-// #define HAL_SD_MODULE_ENABLED
+#define HAL_SD_MODULE_ENABLED
// #define HAL_SMARTCARD_MODULE_ENABLED
// #define HAL_SMBUS_MODULE_ENABLED
// #define HAL_SPDIFRX_MODULE_ENABLED
diff --git a/ports/stm/mpconfigport.mk b/ports/stm/mpconfigport.mk
index 896d78bba..19f9ffa44 100644
--- a/ports/stm/mpconfigport.mk
+++ b/ports/stm/mpconfigport.mk
@@ -6,6 +6,7 @@ USB_SERIAL_NUMBER_LENGTH ?= 24
ifeq ($(MCU_VARIANT),STM32F405xx)
CIRCUITPY_FRAMEBUFFERIO ?= 1
CIRCUITPY_RGBMATRIX ?= 1
+ CIRCUITPY_SDIOIO ?= 1
endif
ifeq ($(MCU_SERIES),F4)
diff --git a/ports/stm/peripherals/stm32f4/stm32f405xx/periph.c b/ports/stm/peripherals/stm32f4/stm32f405xx/periph.c
index e2124bc30..c58234671 100644
--- a/ports/stm/peripherals/stm32f4/stm32f405xx/periph.c
+++ b/ports/stm/peripherals/stm32f4/stm32f405xx/periph.c
@@ -194,3 +194,25 @@ const mcu_tim_pin_obj_t mcu_tim_pin_list[TIM_PIN_ARRAY_LEN] = {
TIM(8, 3, 2, &pin_PI06),
TIM(8, 3, 3, &pin_PI07),
};
+
+//SDIO
+SDIO_TypeDef * mcu_sdio_banks[1] = {SDIO};
+
+const mcu_periph_obj_t mcu_sdio_clock_list[1] = {
+ PERIPH(1, 12, &pin_PC12),
+};
+const mcu_periph_obj_t mcu_sdio_command_list[1] = {
+ PERIPH(1, 12, &pin_PD02),
+};
+const mcu_periph_obj_t mcu_sdio_data0_list[1] = {
+ PERIPH(1, 12, &pin_PC08),
+};
+const mcu_periph_obj_t mcu_sdio_data1_list[1] = {
+ PERIPH(1, 12, &pin_PC09),
+};
+const mcu_periph_obj_t mcu_sdio_data2_list[1] = {
+ PERIPH(1, 12, &pin_PC10),
+};
+const mcu_periph_obj_t mcu_sdio_data3_list[1] = {
+ PERIPH(1, 12, &pin_PC11),
+};
diff --git a/ports/stm/peripherals/stm32f4/stm32f405xx/periph.h b/ports/stm/peripherals/stm32f4/stm32f405xx/periph.h
index e52568c85..020bff370 100644
--- a/ports/stm/peripherals/stm32f4/stm32f405xx/periph.h
+++ b/ports/stm/peripherals/stm32f4/stm32f405xx/periph.h
@@ -61,4 +61,15 @@ extern const mcu_periph_obj_t mcu_uart_rx_list[UART_RX_ARRAY_LEN];
TIM_TypeDef * mcu_tim_banks[TIM_BANK_ARRAY_LEN];
const mcu_tim_pin_obj_t mcu_tim_pin_list[TIM_PIN_ARRAY_LEN];
+//SDIO
+extern SDIO_TypeDef * mcu_sdio_banks[1];
+
+extern const mcu_periph_obj_t mcu_sdio_clock_list[1];
+extern const mcu_periph_obj_t mcu_sdio_command_list[1];
+extern const mcu_periph_obj_t mcu_sdio_data0_list[1];
+extern const mcu_periph_obj_t mcu_sdio_data1_list[1];
+extern const mcu_periph_obj_t mcu_sdio_data2_list[1];
+extern const mcu_periph_obj_t mcu_sdio_data3_list[1];
+
+
#endif // MICROPY_INCLUDED_STM32_PERIPHERALS_STM32F405XX_PERIPH_H
diff --git a/ports/stm/supervisor/port.c b/ports/stm/supervisor/port.c
index 7c9fcf750..5ce92f70a 100644
--- a/ports/stm/supervisor/port.c
+++ b/ports/stm/supervisor/port.c
@@ -43,6 +43,9 @@
#include "common-hal/pulseio/PulseIn.h"
#include "timers.h"
#endif
+#if CIRCUITPY_SDIOIO
+#include "common-hal/sdioio/SDCard.h"
+#endif
#include "clocks.h"
#include "gpio.h"
@@ -224,6 +227,9 @@ void reset_port(void) {
spi_reset();
uart_reset();
#endif
+#if CIRCUITPY_SDIOIO
+ sdioio_reset();
+#endif
#if CIRCUITPY_PULSEIO
timers_reset();
pwmout_reset();
diff --git a/shared-bindings/support_matrix.rst b/shared-bindings/support_matrix.rst
index 124f3a810..1b75e0256 100644
--- a/shared-bindings/support_matrix.rst
+++ b/shared-bindings/support_matrix.rst
@@ -6,11 +6,16 @@ Support Matrix
The following table lists the available built-in modules for each CircuitPython
capable board.
-.. csv-table::
+.. list-table::
:header-rows: 1
:widths: 7, 50
- "Board", "Modules Available"
- {% for key, value in support_matrix|dictsort -%}
- "{{ key }}", "{{ '`' ~ value|join("`, `") ~ '`' }}"
- {% endfor -%}
+ * - Board
+ - Modules Available
+
+ {% for key, value in support_matrix|dictsort %}
+ {{ '.. _' ~ key|replace(" ", "-") ~ ':' }}
+ * - {{ key }}
+ - {{ '`' ~ value|join("`, `") ~ '`' }}
+
+ {% endfor %}
diff --git a/supervisor/shared/rgb_led_status.c b/supervisor/shared/rgb_led_status.c
index f3c210647..2f23e3125 100644
--- a/supervisor/shared/rgb_led_status.c
+++ b/supervisor/shared/rgb_led_status.c
@@ -28,6 +28,7 @@
#include "shared-bindings/microcontroller/Pin.h"
#include "rgb_led_status.h"
#include "supervisor/shared/tick.h"
+#include "py/obj.h"
#ifdef MICROPY_HW_NEOPIXEL
uint8_t rgb_status_brightness = 63;
@@ -365,6 +366,11 @@ void prep_rgb_status_animation(const pyexec_result_t* result,
status->safe_mode = safe_mode;
status->found_main = found_main;
status->total_exception_cycle = 0;
+ status->ok = result->return_code != PYEXEC_EXCEPTION;
+ if (status->ok) {
+ // If this isn't an exception, skip exception sorting and handling
+ return;
+ }
status->ones = result->exception_line % 10;
status->ones += status->ones > 0 ? 1 : 0;
status->tens = (result->exception_line / 10) % 10;
@@ -382,11 +388,12 @@ void prep_rgb_status_animation(const pyexec_result_t* result,
}
line /= 10;
}
- status->ok = result->return_code != PYEXEC_EXCEPTION;
if (!status->ok) {
status->total_exception_cycle = EXCEPTION_TYPE_LENGTH_MS * 3 + LINE_NUMBER_TOGGLE_LENGTH * status->digit_sum + LINE_NUMBER_TOGGLE_LENGTH * num_places;
}
- if (mp_obj_is_subclass_fast(result->exception_type, &mp_type_IndentationError)) {
+ if (!result->exception_type) {
+ status->exception_color = OTHER_ERROR;
+ } else if (mp_obj_is_subclass_fast(result->exception_type, &mp_type_IndentationError)) {
status->exception_color = INDENTATION_ERROR;
} else if (mp_obj_is_subclass_fast(result->exception_type, &mp_type_SyntaxError)) {
status->exception_color = SYNTAX_ERROR;