diff --git a/custom_components/localthings/translations/cs.json b/custom_components/localthings/translations/cs.json index b20383a..d103e44 100644 --- a/custom_components/localthings/translations/cs.json +++ b/custom_components/localthings/translations/cs.json @@ -376,7 +376,25 @@ "53": "AI sušení+", "4e": "Automatické sušení", "26": "Provětrání", - "2a": "Hygienické sušení+" + "2a": "Hygienické sušení+", + "02": "AI sušení", + "03": "Super Speed", + "05": "Ložní prádlo", + "07": "Jemné prádlo", + "09": "Košile", + "0b": "Péče o prošívané bundy", + "0c": "Outdoor impregnace", + "0e": "Ručníky", + "0f": "Vlna", + "11": "Studený vzduch", + "28": "Vnitřní dezinfekce horkým vzduchem", + "37": "Halenky", + "38": "Žehlení", + "39": "Odvlhčování místnosti", + "3a": "Hygienické sušení", + "3b": "Ložní prádlo/Odstranění prachu", + "3c": "Sportovní oblečení", + "3d": "Džíny" } }, "favorite_capacity": { @@ -647,11 +665,31 @@ "name": "Cyklus", "state": { "01": "Normální", + "02": "Extra intenzivní", + "03": "Super Eco", "04": "Rychlé praní", + "05": "Vlna/Spodní prádlo", "06": "XXL prádlo", + "07": "Outdoor", "08": "Máchání+odstřeďování", + "09": "Čištění bubnu", "0a": "Ručníky", + "0b": "Praní varem", + "0c": "Dětské potřeby", + "0d": "Pouze odstřeďování", + "0e": "Zataženo", + "0f": "Čisté praní", + "10": "Sušicí odstřeďování", + "11": "Letní ložní prádlo", + "12": "Bavlna", + "13": "Černá bavlna", + "14": "Jemné spodní prádlo", + "15": "Sportovní oblečení", + "16": "Halenky", "17": "Stažený program", + "18": "Soft Bubble", + "19": "AI praní", + "1a": "Košile", "1b": "Bavlna", "1c": "Eco 40-60", "1d": "Super rychlé", @@ -676,6 +714,7 @@ "32": "Košile", "33": "Ručníky", "34": "Smíšené", + "35": "Eko bavlna", "36": "Praní+sušení", "37": "Sušení vzduchem", "38": "Sušení bavlny", @@ -717,8 +756,7 @@ "8f": "Intenzivní studená", "96": "Méně mikrovláken", "a0": "15min rychlé praní", - "b0": "Smíšená náplň", - "35": "Eko bavlna" + "b0": "Smíšená náplň" } }, "washer_dry_level": { diff --git a/custom_components/localthings/translations/de.json b/custom_components/localthings/translations/de.json index 1fcaee4..37adaf9 100644 --- a/custom_components/localthings/translations/de.json +++ b/custom_components/localthings/translations/de.json @@ -376,7 +376,25 @@ "4e": "Selbsttrocknung", "17": "Super Speed", "26": "Frischluft", - "2a": "Hygienepflege+" + "2a": "Hygienepflege+", + "02": "KI-Trocknen", + "03": "Super Speed", + "05": "Bettwäsche", + "07": "Feinwäsche", + "09": "Hemden", + "0b": "Paddingpflege", + "0c": "Outdoor-Imprägnierpflege", + "0e": "Handtücher", + "0f": "Wolle", + "11": "Kaltluft", + "28": "Innenraum-Heißluftdesinfektion", + "37": "Blusen", + "38": "Bügeltrocken", + "39": "Raumentfeuchtung", + "3a": "Hygienepflege", + "3b": "Bettwäsche/Entstauben", + "3c": "Sportkleidung", + "3d": "Jeansstoff" } }, "favorite_capacity": { @@ -610,10 +628,31 @@ "name": "Programm", "state": { "01": "Normal", + "02": "Super Intensiv", + "03": "Super Eco", "04": "Schnellwäsche", + "05": "Wolle/Dessous", "06": "XXL-Wäsche", + "07": "Outdoor", "08": "Spülen + Schleudern", + "09": "Trommelreinigung", "0a": "Handtücher", + "0b": "Kochwäsche", + "0c": "Babypflege", + "0d": "Nur Schleudern", + "0e": "Bewölkter Tag", + "0f": "Reinwäsche", + "10": "Trockenschleudern", + "11": "Sommer-Bettwäsche", + "12": "Baumwolle", + "13": "Schwarze Baumwolle", + "14": "Feine Unterwäsche", + "15": "Sportkleidung", + "16": "Blusen", + "17": "Heruntergeladen", + "18": "Soft Bubble", + "19": "KI-Wäsche", + "1a": "Hemden", "1b": "Baumwolle", "1c": "Eco 40-60", "1d": "Super Speed", @@ -638,6 +677,7 @@ "32": "Hemden", "33": "Handtücher", "34": "Mischwäsche", + "35": "Eco Baumwolle", "36": "Waschen + Trocknen", "37": "Air Wash", "38": "Trocknen Baumwolle", @@ -652,17 +692,6 @@ "60": "Selbstreinigung+", "65": "Buntwäsche", "66": "Jeansstoff", - "7c": "Weißwäsche", - "7d": "Bettwäsche/Wasserdicht", - "7e": "Selbstreinigung", - "7f": "Wolle/Feinwäsche", - "86": "Tiefenreinigung", - "87": "Download", - "8f": "Kaltwäsche Intensiv", - "96": "Weniger Mikrofasern", - "a0": "Schnelle Wäsche 15'", - "b0": "Gemischte Beladung", - "17": "Heruntergeladen", "69": "KI-Wäsche", "6a": "Wolle", "6b": "Jeansstoff", @@ -680,8 +709,17 @@ "77": "Baumwolle", "78": "Spülen + Schleudern", "79": "Nur Schleudern", + "7c": "Weißwäsche", + "7d": "Bettwäsche/Wasserdicht", + "7e": "Selbstreinigung", + "7f": "Wolle/Feinwäsche", + "86": "Tiefenreinigung", + "87": "Download", "88": "Tierpflege", - "35": "Eco Baumwolle" + "8f": "Kaltwäsche Intensiv", + "96": "Weniger Mikrofasern", + "a0": "Schnelle Wäsche 15'", + "b0": "Gemischte Beladung" } }, "washer_dry_level": { diff --git a/custom_components/localthings/translations/en.json b/custom_components/localthings/translations/en.json index 769cdf8..eb4e61b 100644 --- a/custom_components/localthings/translations/en.json +++ b/custom_components/localthings/translations/en.json @@ -376,7 +376,25 @@ "4c": "Air Refresh", "51": "Eco Cotton", "53": "AI Dry+", - "4e": "Self Dry" + "4e": "Self Dry", + "02": "AI Dry", + "03": "Super Speed", + "05": "Bedding", + "07": "Delicates", + "09": "Shirts", + "0b": "Padding Care", + "0c": "Outdoor Water-Repellent Care", + "0e": "Towels", + "0f": "Wool", + "11": "Cool air", + "28": "Interior Hot Air Sanitize", + "37": "Blouses", + "38": "Iron dry", + "39": "Room Dehumidify", + "3a": "Hygiene Care", + "3b": "Bedding/Dust Off", + "3c": "Activewear", + "3d": "Denim" } }, "favorite_capacity": { @@ -647,11 +665,31 @@ "name": "Cycle", "state": { "01": "Normal", + "02": "Extra Heavy Duty", + "03": "Super Eco Wash", "04": "Quick Wash", + "05": "Wool/Lingerie", "06": "XXL Laundry", + "07": "Outdoor", "08": "Rinse+Spin", + "09": "Drum Clean", "0a": "Towels", + "0b": "Boil Wash", + "0c": "Baby Care", + "0d": "Spin Only", + "0e": "Cloudy Day", + "0f": "Pure Wash", + "10": "Spin Dry", + "11": "Summer Bedding", + "12": "Cottons", + "13": "Black Cottons", + "14": "Delicate Underwear", + "15": "Activewear", + "16": "Blouses", "17": "Downloaded", + "18": "Soft Bubble", + "19": "AI Wash", + "1a": "Shirts", "1b": "Cotton", "1c": "Eco 40-60", "1d": "Super Speed", diff --git a/custom_components/localthings/translations/es.json b/custom_components/localthings/translations/es.json index 8a418a0..362ce08 100644 --- a/custom_components/localthings/translations/es.json +++ b/custom_components/localthings/translations/es.json @@ -572,7 +572,25 @@ "53": "Secado IA+", "4e": "Autosecado", "26": "Aireación", - "2a": "Cuidado higiénico+" + "2a": "Cuidado higiénico+", + "02": "Secado IA", + "03": "Súper velocidad", + "05": "Ropa de cama", + "07": "Delicados", + "09": "Camisas", + "0b": "Cuidado de acolchados", + "0c": "Cuidado hidrófugo para exterior", + "0e": "Toallas", + "0f": "Lana", + "11": "Aire frío", + "28": "Desinfección interior con aire caliente", + "37": "Blusas", + "38": "Planchado fácil", + "39": "Deshumidificación de habitación", + "3a": "Cuidado higiénico", + "3b": "Ropa de cama/Antipolvo", + "3c": "Ropa deportiva", + "3d": "Denim" } }, "favorite_capacity": { @@ -843,11 +861,31 @@ "name": "Ciclo", "state": { "01": "Normal", + "02": "Servicio Extra Intensivo", + "03": "Super Eco", "04": "Lavado rápido", + "05": "Lana/Lencería", "06": "Colada XXL", + "07": "Exterior", "08": "Aclarar + Centrifugar", + "09": "Limpieza de Tambor", "0a": "Toallas", + "0b": "Lavado a ebullición", + "0c": "Cuidado del bebé", + "0d": "Solo centrifugar", + "0e": "Día nublado", + "0f": "Lavado puro", + "10": "Secado-centrifugado", + "11": "Ropa de cama de verano", + "12": "Algodón", + "13": "Algodón negro", + "14": "Ropa interior delicada", + "15": "Ropa deportiva", + "16": "Blusas", "17": "Descargado", + "18": "Burbuja suave", + "19": "Lavado IA", + "1a": "Camisas", "1b": "Algodón", "1c": "Eco 40-60", "1d": "Súper velocidad", @@ -872,6 +910,7 @@ "32": "Camisas", "33": "Toallas", "34": "Mezcla", + "35": "Algodón E", "36": "Lavado + Secado", "37": "Lavado con aire", "38": "Secado de algodón", @@ -886,16 +925,6 @@ "60": "Autolimpieza+", "65": "Color", "66": "Denim", - "7c": "Blancos", - "7d": "Ropa de cama / Impermeable", - "7e": "Autolimpieza", - "7f": "Lana / Delicados", - "86": "Lavado profundo", - "87": "Descarga de Programas", - "8f": "Lavado en frío", - "96": "Menos microfibras", - "a0": "Lavado rápido 15'", - "b0": "Carga mixta", "69": "Lavado IA", "6a": "Lana", "6b": "Denim", @@ -913,8 +942,17 @@ "77": "Algodón", "78": "Aclarar + Centrifugar", "79": "Solo centrifugar", + "7c": "Blancos", + "7d": "Ropa de cama / Impermeable", + "7e": "Autolimpieza", + "7f": "Lana / Delicados", + "86": "Lavado profundo", + "87": "Descarga de Programas", "88": "Cuidado de mascotas", - "35": "Algodón E" + "8f": "Lavado en frío", + "96": "Menos microfibras", + "a0": "Lavado rápido 15'", + "b0": "Carga mixta" } }, "washer_dry_level": { diff --git a/custom_components/localthings/translations/it.json b/custom_components/localthings/translations/it.json index 456a6c0..ceb0341 100644 --- a/custom_components/localthings/translations/it.json +++ b/custom_components/localthings/translations/it.json @@ -376,7 +376,25 @@ "53": "Asciugatura AI+", "4e": "Autoasciugatura", "26": "Arieggiatura", - "2a": "Cura igienica+" + "2a": "Cura igienica+", + "02": "Asciugatura AI", + "03": "Super Speed", + "05": "Biancheria da letto", + "07": "Delicati", + "09": "Camicie", + "0b": "Cura piumini", + "0c": "Cura idrorepellente outdoor", + "0e": "Asciugamani", + "0f": "Lana", + "11": "Aria fredda", + "28": "Sanificazione interna ad aria calda", + "37": "Camicette", + "38": "Pronto da stirare", + "39": "Deumidificazione ambiente", + "3a": "Cura igienica", + "3b": "Biancheria da letto/Antipolvere", + "3c": "Abbigliamento sportivo", + "3d": "Jeans" } }, "favorite_capacity": { @@ -647,11 +665,31 @@ "name": "Ciclo", "state": { "01": "Normale", + "02": "Extra Intenso", + "03": "Super Eco", "04": "Lavaggio rapido", + "05": "Lana/Lingerie", "06": "Bucato XXL", + "07": "Capi outdoor", "08": "Risciacquo+Centrifuga", + "09": "Pulizia cestello", "0a": "Asciugamani", + "0b": "Lavaggio a ebollizione", + "0c": "Bambini", + "0d": "Solo centrifuga", + "0e": "Giornata nuvolosa", + "0f": "Lavaggio puro", + "10": "Asciugatura centrifuga", + "11": "Biancheria da letto estiva", + "12": "Cotone", + "13": "Cotone nero", + "14": "Biancheria intima delicata", + "15": "Abbigliamento sportivo", + "16": "Camicette", "17": "Scaricato", + "18": "Soft Bubble", + "19": "Lavaggio AI", + "1a": "Camicie", "1b": "Cotone", "1c": "Eco 40-60", "1d": "Super Speed", @@ -676,6 +714,7 @@ "32": "Camicie", "33": "Asciugamani", "34": "Misti", + "35": "Cotone E", "36": "Lavaggio+Asciugatura", "37": "Lavaggio ad aria", "38": "Asciugatura cotone", @@ -690,14 +729,6 @@ "60": "Self Clean+", "65": "Colorati", "66": "Jeans", - "7c": "Bianchi", - "7d": "Biancheria da letto/Impermeabile", - "7e": "Pulizia cestello", - "7f": "Lana/Delicati", - "86": "Lavaggio profondo", - "87": "Scaricato", - "8f": "Intenso a freddo", - "96": "Riduci microfibre", "69": "Lavaggio AI", "6a": "Lana", "6b": "Jeans", @@ -715,8 +746,15 @@ "77": "Cotone", "78": "Risciacquo+Centrifuga", "79": "Solo centrifuga", + "7c": "Bianchi", + "7d": "Biancheria da letto/Impermeabile", + "7e": "Pulizia cestello", + "7f": "Lana/Delicati", + "86": "Lavaggio profondo", + "87": "Scaricato", "88": "Cura animali", - "35": "Cotone E", + "8f": "Intenso a freddo", + "96": "Riduci microfibre", "a0": "Rapido 15'", "b0": "Carico misto" } diff --git a/custom_components/localthings/translations/ko.json b/custom_components/localthings/translations/ko.json index 164437f..53ef25a 100644 --- a/custom_components/localthings/translations/ko.json +++ b/custom_components/localthings/translations/ko.json @@ -376,7 +376,25 @@ "53": "AI 맞춤건조+", "4e": "자체 건조", "26": "송풍", - "2a": "살균건조+" + "2a": "살균건조+", + "02": "AI 맞춤건조", + "03": "쾌속건조", + "05": "이불", + "07": "섬세의류", + "09": "셔츠", + "0b": "패딩케어", + "0c": "아웃도어발수케어", + "0e": "타월", + "0f": "울", + "11": "송풍건조", + "28": "열풍내부살균", + "37": "블라우스", + "38": "다림질건조", + "39": "공간제습", + "3a": "살균건조", + "3b": "이불/먼지털기", + "3c": "피트니스", + "3d": "데님" } }, "favorite_capacity": { @@ -647,11 +665,31 @@ "name": "코스", "state": { "01": "표준세탁", + "02": "초강력세탁", + "03": "초절약세탁", "04": "쾌속세탁", + "05": "울/란제리", "06": "XXL 세탁", + "07": "아웃도어", "08": "헹굼+탈수", + "09": "무세제통세척", "0a": "타월", + "0b": "삶음세탁", + "0c": "아기옷", + "0d": "탈수단독", + "0e": "흐린날세탁", + "0f": "청정세탁", + "10": "건조탈수", + "11": "여름이불", + "12": "면의류", + "13": "검은면의류", + "14": "섬세속옷", + "15": "피트니스", + "16": "블라우스", "17": "다운로드 코스", + "18": "소프트버블", + "19": "AI 맞춤세탁", + "1a": "셔츠", "1b": "면", "1c": "에코 40-60", "1d": "쾌속세탁", @@ -676,6 +714,7 @@ "32": "셔츠", "33": "타월", "34": "혼합", + "35": "에코 면", "36": "세탁+건조", "37": "에어워시", "38": "면 건조", @@ -690,16 +729,6 @@ "60": "통세척+", "65": "컬러 의류", "66": "데님", - "7c": "흰옷", - "7d": "이불/방수 의류", - "7e": "통세척", - "7f": "울/섬세", - "86": "찌든 때 세탁", - "87": "다운로드", - "8f": "강력 냉수 세탁", - "96": "미세플라스틱저감", - "a0": "15분 쾌속세탁", - "b0": "혼합 세탁", "69": "AI 맞춤세탁", "6a": "울", "6b": "데님", @@ -717,8 +746,17 @@ "77": "면", "78": "헹굼+탈수", "79": "탈수만", + "7c": "흰옷", + "7d": "이불/방수 의류", + "7e": "통세척", + "7f": "울/섬세", + "86": "찌든 때 세탁", + "87": "다운로드", "88": "펫케어", - "35": "에코 면" + "8f": "강력 냉수 세탁", + "96": "미세플라스틱저감", + "a0": "15분 쾌속세탁", + "b0": "혼합 세탁" } }, "washer_dry_level": { diff --git a/custom_components/localthings/translations/nl.json b/custom_components/localthings/translations/nl.json index 81b57c4..a16d15a 100644 --- a/custom_components/localthings/translations/nl.json +++ b/custom_components/localthings/translations/nl.json @@ -376,7 +376,25 @@ "53": "AI drogen+", "4e": "Zelf drogen", "26": "Luchtverfrissing", - "2a": "Hygiënische verzorging+" + "2a": "Hygiënische verzorging+", + "02": "AI drogen", + "03": "Super Speed", + "05": "Beddengoed", + "07": "Fijne was", + "09": "Overhemden", + "0b": "Paddingverzorging", + "0c": "Waterafstotende outdoorverzorging", + "0e": "Handdoeken", + "0f": "Wol", + "11": "Koude lucht", + "28": "Interne desinfectie met hete lucht", + "37": "Blouses", + "38": "Strijkdroog", + "39": "Ruimte ontvochtigen", + "3a": "Hygiënisch drogen", + "3b": "Beddengoed/Stof verwijderen", + "3c": "Sportkleding", + "3d": "Spijkergoed" } }, "favorite_capacity": { @@ -647,11 +665,31 @@ "name": "Programma", "state": { "01": "Normaal", + "02": "Extra intensief", + "03": "Super Eco", "04": "Snelle was", + "05": "Wol/Lingerie", "06": "XXL was", + "07": "Outdoor", "08": "Spoelen+centrifugeren", + "09": "Trommel reinigen", "0a": "Handdoeken", + "0b": "Kookwas", + "0c": "Babyverzorging", + "0d": "Alleen centrifugeren", + "0e": "Bewolkte dag", + "0f": "Zuivere was", + "10": "Droogcentrifugeren", + "11": "Zomer beddengoed", + "12": "Katoen", + "13": "Zwart katoen", + "14": "Fijn ondergoed", + "15": "Sportkleding", + "16": "Blouses", "17": "Gedownload", + "18": "Soft Bubble", + "19": "AI Wash", + "1a": "Overhemden", "1b": "Katoen", "1c": "Eco 40-60", "1d": "Super Speed", @@ -676,6 +714,7 @@ "32": "Overhemden", "33": "Handdoeken", "34": "Gemengd", + "35": "Eco katoen", "36": "Wassen+drogen", "37": "Air Wash", "38": "Katoen drogen", @@ -717,8 +756,7 @@ "8f": "Intensief koud", "96": "Minder microvezels", "a0": "15' Snelle was", - "b0": "Gemengde was", - "35": "Eco katoen" + "b0": "Gemengde was" } }, "washer_dry_level": { diff --git a/tests/test_translations.py b/tests/test_translations.py index 8697510..10d9e0e 100644 --- a/tests/test_translations.py +++ b/tests/test_translations.py @@ -211,6 +211,167 @@ def test_confirmed_washer_table_02_ww90dg5g34able_course_names(): } +def test_confirmed_washer_table_02_wf21t6500kv_course_names(): + """Issue #376: WF21T6500KV (DA_WM_A51_20_COMMON) reported Korean labels + for 21 previously-untranslated Table_02 codes. 20 are added here; '06' + is deliberately excluded -- the reporter's own Korean text for it + ('이불', Bedding) conflicts with the confirmed 'XXL Laundry' already + locked in by test_confirmed_washer_table_02_missing_course_names + (issue #342), so it stays as-is pending the reporter (or another + Table_02 owner) confirming which device's '06' is wrong. + + Several of the 20 share their Korean text with an already-confirmed + code (cross-checked against translations/ko.json, not guessed), so + those reuse the established label rather than a fresh translation -- + checked in every locale per issue #363's precedent, since a locale + that translated the shared text differently would still pass the + key-topology test alone. + """ + english = _load("en")["entity"]["select"]["washer_cycle_table_02"]["state"] + assert { + code: english[code] + for code in ( + "02", + "03", + "05", + "07", + "09", + "0b", + "0c", + "0d", + "0e", + "0f", + "10", + "11", + "12", + "13", + "14", + "15", + "16", + "18", + "19", + "1a", + ) + } == { + "02": "Extra Heavy Duty", + "03": "Super Eco Wash", + "05": "Wool/Lingerie", + "07": "Outdoor", + "09": "Drum Clean", + "0b": "Boil Wash", + "0c": "Baby Care", + "0d": "Spin Only", + "0e": "Cloudy Day", + "0f": "Pure Wash", + "10": "Spin Dry", + "11": "Summer Bedding", + "12": "Cottons", + "13": "Black Cottons", + "14": "Delicate Underwear", + "15": "Activewear", + "16": "Blouses", + "18": "Soft Bubble", + "19": "AI Wash", + "1a": "Shirts", + } + assert english["06"] == "XXL Laundry" # not '이불'/Bedding -- see docstring + + # Anchors picked among the code's own duplicate-label siblings by + # whichever this catalog already has translated consistently -- '2b' + # over its "AI 맞춤세탁" twin '69', which nl.json alone translates + # differently ("AI wassen" vs "AI Wash"), an existing inconsistency + # unrelated to this issue and not one this PR resolves. + reused_pairs = ( + ("07", "75"), + ("09", "3a"), + ("0c", "2e"), + ("15", "2f"), + ("16", "6c"), + ("19", "2b"), + ("1a", "32"), + ) + for language in _languages(): + states = _load(language)["entity"]["select"]["washer_cycle_table_02"]["state"] + for new_code, anchor_code in reused_pairs: + assert states[new_code] == states[anchor_code], (language, new_code, anchor_code) + + +def test_confirmed_dryer_table_03_dv19t8745bv_course_names(): + """Issue #376: DV19T8745BV (DA_WM_TP1_21_COMMON) reported Korean labels + for 18 previously-untranslated Table_03 codes -- none conflict with an + existing entry. As with the washer table above, codes sharing Korean + text with an already-confirmed code (including two, '3c'/'3d', whose + text matches a washer_cycle_table_02 entry rather than one on this + table) reuse that label instead of a fresh translation, checked in + every locale. + """ + english = _load("en")["entity"]["select"]["dryer_cycle_table_03"]["state"] + assert { + code: english[code] + for code in ( + "02", + "03", + "05", + "07", + "09", + "0b", + "0c", + "0e", + "0f", + "11", + "28", + "37", + "38", + "39", + "3a", + "3b", + "3c", + "3d", + ) + } == { + "02": "AI Dry", + "03": "Super Speed", + "05": "Bedding", + "07": "Delicates", + "09": "Shirts", + "0b": "Padding Care", + "0c": "Outdoor Water-Repellent Care", + "0e": "Towels", + "0f": "Wool", + "11": "Cool air", + "28": "Interior Hot Air Sanitize", + "37": "Blouses", + "38": "Iron dry", + "39": "Room Dehumidify", + "3a": "Hygiene Care", + "3b": "Bedding/Dust Off", + "3c": "Activewear", + "3d": "Denim", + } + + same_table_pairs = ( + ("02", "29"), + ("03", "17"), + ("05", "1b"), + ("07", "19"), + ("09", "1c"), + ("0e", "1d"), + ("0f", "1a"), + ("11", "24"), + ("38", "20"), + ("3a", "21"), + ) + for language in _languages(): + d_states = _load(language)["entity"]["select"]["dryer_cycle_table_03"]["state"] + w_states = _load(language)["entity"]["select"]["washer_cycle_table_02"]["state"] + for new_code, anchor_code in same_table_pairs: + assert d_states[new_code] == d_states[anchor_code], (language, new_code, anchor_code) + # Cross-table reuse: same Korean text as a washer_cycle_table_02 code. + assert d_states["37"] == w_states["6c"], language # Blouses + assert d_states["3c"] == w_states["2f"], language # Activewear + assert d_states["3d"] == w_states["66"], language # Denim + + def test_reported_washer_standard_courses_all_have_table_02_labels(): """Every non-personal code in the reported washer's live course list must resolve through the Table_02 catalog instead of appearing as raw