@ihabdevteam/core 0.314.0 → 0.318.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +242 -0
- package/dist/components.cjs.js +182 -182
- package/dist/hooks.cjs.js +3 -3
- package/dist/i18n.cjs.js +3 -3
- package/dist/ihabdevteam-core.cjs.js +188 -188
- package/dist/ihabdevteam-core.d.ts +50 -3
- package/dist/packages/core/src/components/BarChart.js +16 -1
- package/dist/packages/core/src/components/Footer.js +1 -1
- package/dist/packages/core/src/components/HearingDeviceInfo.js +2 -2
- package/dist/packages/core/src/components/PanelRow.js +2 -2
- package/dist/packages/core/src/components/Popup/CouponInputPopup.js +4 -2
- package/dist/packages/core/src/components/Popup/DeviceSideTable.js +2 -2
- package/dist/packages/core/src/components/Popup/ListPopup.d.ts +12 -2
- package/dist/packages/core/src/components/Popup/WordDataUpdatePopup.js +1 -1
- package/dist/packages/core/src/components/Table.js +5 -3
- package/dist/packages/core/src/components/Tooltip/tooltipConstants.js +4 -0
- package/dist/packages/core/src/components/Training/TrainingBlockButton.js +5 -2
- package/dist/packages/core/src/components/Training/TrainingStepCard.js +11 -6
- package/dist/packages/core/src/components/Training/TrainingStepConfirmWithText.js +13 -8
- package/dist/packages/core/src/components/Training/audioWaits.js +22 -4
- package/dist/packages/core/src/components/Training/stepAnswerable.d.ts +32 -0
- package/dist/packages/core/src/components/Training/stepAnswerable.js +4 -0
- package/dist/packages/core/src/components/Training/useNoiseFade.js +5 -1
- package/dist/packages/core/src/components/WordTable.js +3 -16
- package/dist/packages/core/src/components/wordTableLayout.d.ts +34 -0
- package/dist/packages/core/src/components/wordTableLayout.js +48 -0
- package/dist/packages/core/src/components.d.ts +1 -1
- package/dist/packages/core/src/components.js +1 -1
- package/dist/packages/core/src/hooks/useWordTrainingFilter.js +6 -1
- package/dist/packages/core/src/i18n/locales/en.json +39 -18
- package/dist/packages/core/src/i18n/locales/ko.json +6 -1
- package/dist/packages/core/src/utils/wornDate.d.ts +14 -2
- package/dist/packages/core/src/utils/wornDate.js +38 -3
- package/dist/packages/core/src/version.d.ts +1 -1
- package/dist/packages/core/src/version.js +1 -1
- package/dist/utils.cjs.js +1 -1
- package/package.json +1 -1
package/CHANGELOG.md
CHANGED
|
@@ -7,6 +7,248 @@ All notable changes to this project will be documented in this file.
|
|
|
7
7
|
> 적은 글이라, 지금 이름으로 고쳐 놓으면 그 시절에 그 이름으로 받은 사람이
|
|
8
8
|
> 제 이야기를 못 찾는다.
|
|
9
9
|
|
|
10
|
+
## 0.318.0
|
|
11
|
+
|
|
12
|
+
### (205) 등급 툴팁 — **세 화면이 한 말을 한다**
|
|
13
|
+
|
|
14
|
+
코어는 *"국립국어원의 기초 어휘 등급이 결과에 반영됩니다"* **한 줄**이었다. 그 말로는 **1등급이
|
|
15
|
+
쉬운 쪽인지 어려운 쪽인지도** 알 수 없다. 앱 두 화면에는 이미 다섯 줄이 들어가 있어
|
|
16
|
+
(앱 열쇠 `wordSearch.filter.gradeInfo`) **세 화면이 다른 말**을 하고 있었다 — 사장님이 주신 글을
|
|
17
|
+
받아 코어 쪽을 **글자까지 같게** 맞췄다(`difficultyInfo1`~`5`).
|
|
18
|
+
|
|
19
|
+
> 말귀가 **앱 열쇠를 새로 세운 것이 맞았다** — 코어 몫을 앱 사전으로 덮으면 *사전은 한 곳이
|
|
20
|
+
> 갖는다* 는 그쪽 못(`i18nOwnership`)이 운다. 그래서 **코어 쪽을 맞추는 것이 유일한 길**이었다.
|
|
21
|
+
|
|
22
|
+
못은 *다섯 줄이 두 사전에 있나 · 등급 넷과 `등급없음` 을 빠짐없이 말하나 · **부르는 쪽이 다섯을
|
|
23
|
+
다 쓰나*** 를 센다(하나를 빼먹으면 그 등급만 설명이 없다 — 넷만 쓰게 고쳐 깨뜨려 확인했다).
|
|
24
|
+
|
|
25
|
+
### (205) 의 `등급없음` 보기는 **아직 안 넣었다**
|
|
26
|
+
|
|
27
|
+
`buildGradeSection` 이 `[1, 2, 3, 4]` 를 박고 있는 것은 맞다. 그런데 고른 보기를 실제로 걸러내는
|
|
28
|
+
자리(`phonemePairSearch.ts`)가 **라벨에서 숫자만 뽑아** `word.grade` 와 견준다 — `등급없음` 은 그
|
|
29
|
+
길로는 `''` 가 되고, **등급 없는 낱말의 `grade` 가 자료에 무엇으로 들어 있는지**(빈 글자인지
|
|
30
|
+
`null` 인지)를 모른 채 넣으면 **보이지만 아무것도 못 거르는 보기**가 된다. 건드릴 자리는 넷이다
|
|
31
|
+
(`등급값` · 코드표 · `buildGradeSection` · 맞추는 자리). **그 한 값을 라이브에서 재서 받은 뒤** 넣는다 —
|
|
32
|
+
짐작으로 넣는 것이 이 저장소에서 가장 오래 가는 흠이다.
|
|
33
|
+
|
|
34
|
+
|
|
35
|
+
### (201) 한 번 고른 뒤에도 **답을 고칠 수 있다** — QA 가 올린 버그
|
|
36
|
+
|
|
37
|
+
`TrainingStepCard` 가 `currentState !== 'active'` 로 막고 있었다. 그 막이는 **까닭이 있어 들어왔다** —
|
|
38
|
+
단추는 `!== 'disabled'` 로 열려 있는데 기록은 `=== 'active'` 일 때만 나가서 **화면 선택은 바뀌는데
|
|
39
|
+
점수는 그대로**였다. 그런데 고르는 순간 `onDone` 이 나가 단계가 넘어가므로 **자기 첫 고름에 자기가
|
|
40
|
+
막혔다** — 보기 셋에서 손이 미끄러지면 그 판은 그대로 끝났다.
|
|
41
|
+
|
|
42
|
+
**둘 다 틀렸고 바라는 것은 셋째다 — 선택도 바뀌고 점수도 따라간다**(말귀_2 의 가름 그대로).
|
|
43
|
+
가름을 *"지금 서 있는 단계인가"* 에서 **"아직 닿지 않은 단계인가"** 로 옮겼다
|
|
44
|
+
(`stepAnswerable.canAnswerStep`): `active`·`done` 은 열고 `disabled` 만 막는다. 그리고 **고친 답도
|
|
45
|
+
`onDone` 으로 보낸다** — 그것이 옛 막이의 까닭을 메우는 자리다.
|
|
46
|
+
|
|
47
|
+
### 고치기 전에 **러너의 셈을 재고** 고쳤다
|
|
48
|
+
|
|
49
|
+
이미 지난 단계가 다시 알려도 안전한 까닭은 하나뿐이다 — 러너가 차례를
|
|
50
|
+
`stepIndex: Math.max(prev.stepIndex, …)` 로 올린다. 안 재고 고쳤으면 **고친 답이 다음 단계를
|
|
51
|
+
한 칸 더 밀** 수도 있었다. 그 셈을 못으로 둔다.
|
|
52
|
+
|
|
53
|
+
> **그 못도 한 번 안 울었다.** 처음엔 `Math.max` 를 `toMatch` 하나로 봤는데 **답 길이 둘**이라
|
|
54
|
+
> (쪽 단계 · 자식 단계) 한쪽을 `+1` 로 되돌려도 다른 쪽이 정규식을 채웠다 — **셈으로** 바꿨다
|
|
55
|
+
> (`Math.max` 둘 · 그냥 `+1` 하나는 *다음 단추* 길이라 남는다).
|
|
56
|
+
|
|
57
|
+
### 엉뚱한 자리를 한 번 고쳤다 — 못이 잡았다
|
|
58
|
+
|
|
59
|
+
`handleSelect` 를 고치려 했는데 **같은 글이 `handlePlayDone` 에도 있어** 첫 자리에 붙었다
|
|
60
|
+
(`onChange` → `onDone` 블록이 글자까지 같다). 그대로였으면 **소리가 끝날 때마다 차례가 나가는**
|
|
61
|
+
다른 흠이 됐다. 못이 *"고친 답이 안 나갔다"* 로 울어 알았다 — **글로 자리를 집을 때는 그 글이
|
|
62
|
+
하나인지 먼저 센다.**
|
|
63
|
+
|
|
64
|
+
### 같은 막이 넷 중 **하나는 재현돼 함께 옮겼다** — `ConfirmWithText`
|
|
65
|
+
|
|
66
|
+
말귀가 화면에서 쟀다(회원앱 `오늘의 듣기 › 소음 하 문장 듣기`): `안 들렸어요` 뒤에 `잘 들렸어요`
|
|
67
|
+
를 눌러도 **아무 일도 안 났다.** **여기는 (201) 보다 한 가지가 더 나빴다** — `disabled` 가 `false` 라
|
|
68
|
+
**막혀 보이지도 않는다.** 누를 수 있게 생긴 단추가 반응을 안 하면 쓰는 사람은 *자기가 잘못 눌렀다고
|
|
69
|
+
여기고 몇 번 더 누른다.* 그리고 여기는 **`확인` 단추가 없어** 둘 중 하나를 누르는 것이 곧 답이라,
|
|
70
|
+
*"여럿 고르기는 확인이 그 틈을 메운다"* 는 면제가 **안 걸린다.** 오늘의 듣기 **첫 칸**이다.
|
|
71
|
+
|
|
72
|
+
### 남은 셋은 **아직 못 쟀다** — 그대로 둔다
|
|
73
|
+
|
|
74
|
+
`TrainingStepConfirm` · `CardOrder` · `OrderList`. 말귀가 **화면에 못 세워** 못 쟀다(미리보기 칸이
|
|
75
|
+
1440 을 800 으로 줄여 그려 누를 자리가 어긋났고, 느슨한 선택자가 다른 탭을 눌러 창을 닫았다).
|
|
76
|
+
**겉꼴이 같다고 함께 바꾸지 않는다** — 특히 순서 매기기는 *'고침' 의 뜻*(되돌려 놓는 것이 답인지)
|
|
77
|
+
부터 봐야 한다.
|
|
78
|
+
|
|
79
|
+
### **옛 계약 시험이 옛 꼴을 붙들고 있었다** — 갈라진 것을 적었다
|
|
80
|
+
|
|
81
|
+
`TrainingStepDoneReadonly` 가 *"끝낸 단계는 결과만 보여 준다"* 를 **네 조각에 걸친 한 계약**으로
|
|
82
|
+
못 박아 두었다. 그 글의 **걱정은 그대로 참이다**(화면 선택과 점수가 어긋나면 안 된다) — 다만
|
|
83
|
+
막아서 푸는 대신 **같이 움직여서** 푼다. 그래서 그 못을 지우지 않고 **갈래가 둘이 된 것**을 적었다:
|
|
84
|
+
|
|
85
|
+
옮긴 곳 Card · ConfirmWithText 고치면 둘 다 움직인다
|
|
86
|
+
그대로 Confirm · CardOrder · OrderList 아직 막는다 — 재 보지 않았다
|
|
87
|
+
|
|
88
|
+
머리말에 **"넷이 같아야 한다 로 되돌리지 말 것"** 과 그 까닭(뜻이 달라서가 아니라 아직 안 재서)을
|
|
89
|
+
적었다. 셈과 까닭은 `stepAnswerable` 머리말에도 있다.
|
|
90
|
+
|
|
91
|
+
## 0.317.0
|
|
92
|
+
|
|
93
|
+
### (301) 미디어 소스를 비우는 **바른 꼴** — 뒷정리가 내던 오류를 걷는다
|
|
94
|
+
|
|
95
|
+
말귀_1 이 사장님 지시(*"소음 소리 나는지 니가 직접 재봐"*)로 **처음 소리를 재다가** 찾았다.
|
|
96
|
+
소리는 제대로 났고(문장 play → 18ms 뒤 소음 loop · 문장 ended → 402ms 뒤 소음 pause), 재는 길에
|
|
97
|
+
이것이 걸렸다 — `el.src = ''` 는 *"소스 없음"* 이 아니라 **"쪽 주소를 소스로 삼아라"** 다:
|
|
98
|
+
|
|
99
|
+
17888 loadedmetadata src=F03023.mp3 ← 길이 재기는 성공
|
|
100
|
+
17888 abort src=(없음) ← 뒷정리 직후
|
|
101
|
+
17894 error code 4 "MEDIA_ELEMENT_ERROR: Empty src attribute"
|
|
102
|
+
|
|
103
|
+
**실패가 아니라 뒷정리가 낸 오류다.** `done` 깃발 덕에 사람에게는 아무 일도 없지만 **문장을
|
|
104
|
+
불러올 때마다, 소음을 걷을 때마다** 한 번씩 쌓이고, 빈 `src` 는 쪽을 **한 번 더 받으러** 간다.
|
|
105
|
+
`removeAttribute('src')` 뒤 `load()` 로 바꿨다.
|
|
106
|
+
|
|
107
|
+
> **값은 콘솔이 깨끗해지는 것만이 아니다.** 말귀가 **밤새 소리를 못 쟀던 까닭 중 하나가 이 줄**이다 —
|
|
108
|
+
> 미디어 오류가 이미 쌓여 있으니 *"원래 이런가 보다"* 로 지나갔다. **가짜 오류는 진짜 오류를 가린다.**
|
|
109
|
+
|
|
110
|
+
### 자리는 **둘**이었다
|
|
111
|
+
|
|
112
|
+
말귀는 `audioWaits.ts` 를 짚었는데, 세어 보니 `useNoiseFade.ts` 의 소음 걷기도 같은 꼴이었다 —
|
|
113
|
+
**하필 그가 재던 그 요소다.** 소음은 훈련마다 서고 걷히니 그 가짜 오류도 그만큼 쌓였다.
|
|
114
|
+
|
|
115
|
+
### 흉내가 빈약해서 **맞는 코드가 틀린 것처럼** 보였다
|
|
116
|
+
|
|
117
|
+
고친 뒤 `useNoiseFade` 의 옛 못이 빨개졌다(`expected '/sounds/noise/noise1.mp3' to be ''`).
|
|
118
|
+
`FakeAudio` 에 **`removeAttribute` 가 없어서** 속성을 지워도 `src` 가 그대로 남은 것이다 — 코드가
|
|
119
|
+
아니라 **재료**가 틀렸다. jsdom 실물로 재 보니 `removeAttribute('src')` 는 `.src` 를 `''` 로 만들고
|
|
120
|
+
`load()` 는 안 터진다. 흉내에 그 둘을 더했다. **흉내가 실물보다 빈약하면 거짓 빨강이다.**
|
|
121
|
+
|
|
122
|
+
못은 **그 꼴이 다시 안 생기는지**를 센다(`src = ''` 0건 · `removeAttribute` 와 `load` 를 함께 —
|
|
123
|
+
속성만 지우면 받던 것이 안 끊긴다). 둘 다 깨뜨려 확인했다. 그려진 콘솔은 `LIVE-ONLY-CHECKS` 10번이다.
|
|
124
|
+
|
|
125
|
+
> 말귀_1 이 덧붙인 말: *"저는 「소리는 나겠지, 단추가 열리니까」 로 밤새 넘겼는데 **열리는 것과
|
|
126
|
+
> 나는 것은 다른 일**이었습니다. 재 보니 둘 다 맞긴 했지만, 맞은 것은 **운이었지 확인이 아니었습니다.**"*
|
|
127
|
+
|
|
128
|
+
### 청 번호가 갈래로 나뉘었다 — 말귀_1 **201~** · 말귀_2 **301~**
|
|
129
|
+
|
|
130
|
+
(117)~(120) 이 두 뜻으로 겹친 뒤(각각 0.315.0 · 0.316.0 으로 나갔다) 말귀 둘이 정했다. 번호는
|
|
131
|
+
`CORE_REQUESTS.md` 에 **절을 쓰면서만** 잡고 다른 문서에서는 가리키기만 한다 — **번호를 잡는 자리와
|
|
132
|
+
쓰는 자리가 같아야** 서로 묻지 않아도 안 겹친다. 이 글은 (301) 이지만 갈래가 바뀐 첫 판일 뿐
|
|
133
|
+
새 종류는 아니다. 코어 쪽 대책은 그대로다 — **번호만 적지 않고 무엇인지를 함께 적는다.**
|
|
134
|
+
|
|
135
|
+
## 0.316.0
|
|
136
|
+
|
|
137
|
+
말귀_1 의 넷((117)~(120)). 넷 다 **앱에서는 못 고치는** 자리였다(창·칸·단추·꾸밈이 모두 코어 것이다).
|
|
138
|
+
셋은 낭독기·자판 쪽이고 하나만 눈에 보인다.
|
|
139
|
+
|
|
140
|
+
> **번호가 두 가지를 뜻했다.** 같은 날 말귀_2 도 (117)~(120) 으로 **다른 넷**(영어 복수형 · 주소 오타 ·
|
|
141
|
+
> 바닥글 · 품사 이름표)을 넘겼고 그것은 **0.315.0** 에 나갔다. 번호 공간은 하나(`CORE_REQUESTS.md`)
|
|
142
|
+
> 인데 말귀_2 는 그 번호를 **글로만 집고 절을 안 썼고**, 말귀_1 은 같은 번호로 절을 썼다. 번호만 보면
|
|
143
|
+
> *이미 한 것*과 *안 한 것*이 겹친다 — 그래서 **아래 글과 못은 번호가 아니라 무엇인지로 적는다.**
|
|
144
|
+
|
|
145
|
+
### (118) 기기 착용일이 **보는 말을 따른다** — 넷 중 유일하게 눈에 보이던 흠
|
|
146
|
+
|
|
147
|
+
`formatWornDate` 가 `2026.09.09` 한 꼴만 냈다. 사장님 지시(2026-10-11 *"날짜 꼴도 하나로 통일해"*)로
|
|
148
|
+
앱이 다른 화면 날짜를 모은 뒤, **말귀매니저에 남은 점 꼴은 기기 탭 그 둘뿐**이었다 — 한 창 안에서
|
|
149
|
+
기기 탭의 `2026.09.09` 와 프로필·보고서의 `2026년 9월 9일` 이 나란히 섰다.
|
|
150
|
+
|
|
151
|
+
`lang` 을 받아 `formatDateLocale` 로 넘긴다(한국어 `2026년 9월 9일` · 영어 `Sep 9, 2026` — 앱이 모은
|
|
152
|
+
그 꼴과 같다). **반쪽 값**(연도만 · 연월만)은 그 말로 옮길 수가 없어 점 꼴 그대로다(서버에 월·일이
|
|
153
|
+
`null` 로 오는 옛 기록이 있다). `lang` 을 안 주면 예전 그대로다.
|
|
154
|
+
|
|
155
|
+
**자리는 셋이었다** — 말귀가 둘(`PanelRow` · `DeviceSideTable`)을 짚었는데 `HearingDeviceInfo` 가
|
|
156
|
+
하나 더 있었다. 셋 다 이미 `useTranslation` 을 쓰고 있어 `i18n.language` 를 그 자리에서 꺼냈다.
|
|
157
|
+
|
|
158
|
+
### 그리고 **없는 날짜를 조용히 고쳐 보여 주던 것** — 못이 안 울어서 찾았다
|
|
159
|
+
|
|
160
|
+
`new Date('2026-09-31')` 은 **2026-10-01** 로 굴러간다(`2026-02-30` → `2026-03-02`, 실측). 그대로
|
|
161
|
+
넘겼으면 자료에 적힌 날과 **다른 날**이 화면에 섰다 — **잘못된 값을 보여 주는 것보다 조용히 고쳐
|
|
162
|
+
보여 주는 것이 나쁘다**(사람이 틀린 줄 모른다). 지은 ISO 가 **그대로 돌아올 때만** 말로 옮긴다.
|
|
163
|
+
|
|
164
|
+
> 이 자리는 **깨뜨려 봤는데 안 울어서** 찾았다. `&& m && d` 조건을 걷어도 조용했고(그때는
|
|
165
|
+
> `2026-00-00` 이 *못 읽는 날짜*라 저절로 떨어졌다), *무엇이 막고 있나* 를 물으니 막는 것이 그
|
|
166
|
+
> 조건이 아니었다 — 그리고 **굴러가는 쪽은 아무도 안 막고 있었다.**
|
|
167
|
+
|
|
168
|
+
### (117) 쿠폰 글칸에 **틀렸다는 표**를 단다
|
|
169
|
+
|
|
170
|
+
실측(말귀 2026-10-12): 없는 쿠폰을 넣으면 글귀는 뜨는데 칸은 `aria-invalid`·`aria-describedby`·
|
|
171
|
+
`aria-errormessage` 가 **다 `null`** 이었다. 글귀의 `role="alert"` 덕에 **한 번은 읽히고** 거기서 끝 —
|
|
172
|
+
낭독기로 그 칸에 다시 서면 아무 표도 없어 *"고치랬는데 뭘 고치지"* 로 멈춘다(친 값은 그대로 남아 있다).
|
|
173
|
+
눈으로 보는 사람은 칸 아래 빨간 글로 바로 잇지만 소리로 듣는 사람에게는 그 둘이 이어져 있지 않았다.
|
|
174
|
+
|
|
175
|
+
`aria-invalid` 와 `aria-errormessage`(+`aria-describedby`)를 **글귀가 있을 때만** 단다 —
|
|
176
|
+
`aria-errormessage` 는 `aria-invalid` 가 참일 때만 읽히는 자리라 둘을 늘 같이 단다.
|
|
177
|
+
|
|
178
|
+
### (119) 상세보기 단추가 **카드마다 제 이름**을 갖는다
|
|
179
|
+
|
|
180
|
+
한 쪽에 차트가 여섯 장 서고 그중 셋이 이 단추를 단다. 이름이 늘 `상세보기` 한 가지라 낭독기로는
|
|
181
|
+
**"Details · Details · Details"** 뿐이었다(앱이 제 손으로 붙이는 고르개는 같은 날 카드 이름을 담도록
|
|
182
|
+
고쳤는데 **코어가 세우는 셋만** 똑같았다). 바깥에서 더 받지 않는다 — **이미 `titleKey` 를 받고 있다.**
|
|
183
|
+
`trainingStatus.detailFor`(`{{name}} 상세보기` · `{{name}} details`), 제목이 없으면 예전 글자로 떨어진다.
|
|
184
|
+
머리 단추와 **좁아서 접힌 `⋯` 메뉴**가 같은 값을 쓴다(한쪽만 고치면 좁은 화면에서 갈린다).
|
|
185
|
+
|
|
186
|
+
### (120) `ListPopup.onSelect` 가 **선택**이 됐다
|
|
187
|
+
|
|
188
|
+
그 값이 그대로 `Table` 의 `onRowClick` 이 되고, `Table` 은 **그것이 있다는 것만 보고** 줄을 꾸민다
|
|
189
|
+
(손가락 커서 · `tabindex="0"` · *"줄을 누르면 자세히 봅니다"*). 그래서 누를 것이 없는 표도 **빈 함수를
|
|
190
|
+
넘겨야** 했고 그 꾸밈이 그대로 섰다 — 자판으로 쓰는 사람은 **줄마다 멈췄다**(스무 줄이면 스무 번).
|
|
191
|
+
안 주면 `onRowClick` 도 비어 그 꾸밈이 저절로 사라진다.
|
|
192
|
+
|
|
193
|
+
### 옛 못 넷이 바뀐 값을 잡았다 — 넷 다 **일부러 바꾼 것**이라 뜻을 새로 적었다
|
|
194
|
+
|
|
195
|
+
`barChartHeadExtra0916`·`chartSectionHeadSegment0916` 은 단추를 **이름 `상세보기` 로** 찾고 있었고
|
|
196
|
+
(카드 이름이 담기니 안 맞는다 — 차례를 지키는 못이라 머리글자로 찾게 고쳤다), `panelRowDevice`·
|
|
197
|
+
`deviceSideTable` 은 **점 꼴 날짜**를 박고 있었다. 넷 다 고친 까닭을 그 자리에 적었다.
|
|
198
|
+
|
|
199
|
+
## 0.315.0
|
|
200
|
+
|
|
201
|
+
말귀가 **영어 화면을 눈으로 열세 쪽** 보고 넘긴 넷((117)~(120)). 넘길 때 *"이 종류가 몇 자리인지는
|
|
202
|
+
안 셌다"* 를 함께 적어 주어서, **세는 일은 이쪽에서 했다** — 어제 맞춘 그 결이다.
|
|
203
|
+
|
|
204
|
+
### (117) 영어 복수형 — 화면에 **`1 questions`** 가 떴다
|
|
205
|
+
|
|
206
|
+
오늘의 듣기 카드에 「국방 — 1 questions」(`training.countQuestions`). 말귀가 아홉을 짚었고 **세어 보니
|
|
207
|
+
스물넷이 걸렸다** — 뜻으로 가리니 **열여섯**이 복수가 필요했다(`{{count}} of {{max}}` · `{{n}} Syll.`
|
|
208
|
+
처럼 수 뒤가 명사가 아니거나 줄임말인 여덟은 뺐다). 짚어 준 아홉에 **`(s)` 로 눙쳐 둔 셋**
|
|
209
|
+
(`{{count}} visit(s)` · `run(s)` · `record(s)`)과 넷이 더 있었다.
|
|
210
|
+
|
|
211
|
+
영어는 `key_one`/`key_other`, **한국어는 밑열쇠 그대로**(꼴이 하나다) — 이 저장소에 이미 있던 꼴을
|
|
212
|
+
그대로 따랐다(`common.days` · `common.selectedCount`). 긴 문장은 **동사까지** 맞췄다
|
|
213
|
+
(`1 older record was excluded` / `2 older records were excluded`).
|
|
214
|
+
|
|
215
|
+
**사전만 고치면 화면은 안 바뀐다** — i18next 가 가르는 것은 `count` 다. `{{n}}` 열쇠를 부르는 자리
|
|
216
|
+
셋에 `{ n, count: n }` 을 넘겼다(`formatCount` 로 쉼표를 넣은 글자를 `count` 로 주면 못 가르므로
|
|
217
|
+
**날수를 따로** 넘긴다). 못도 **두 쪽**이다 — 사전 쪽과 **부르는 쪽**. 사전 쪽만 두었다가 부르는
|
|
218
|
+
쪽을 옛 꼴로 되돌려 보니 **조용했다.**
|
|
219
|
+
|
|
220
|
+
### (118) 바닥글 영어 주소 오타 — `Siocheong-gil` → `Sicheong-gil`
|
|
221
|
+
|
|
222
|
+
### (119) 이름표와 값이 **붙어 읽힌다** — 그런데 눈에는 안 보인다
|
|
223
|
+
|
|
224
|
+
말귀가 `CEOJi-hye Han` · `Supportsupport@ihab.co.kr` 를 보고 넘겼다. 재 보니 **눈으로는 떨어져 있다** —
|
|
225
|
+
`.footer-title` 이 `inline-block; width: 80px` 이고 영어 이름표 중 가장 긴 `Address`·`Support` 도
|
|
226
|
+
어림 50px 다. **그쪽이 본 것은 그려진 꼴이 아니라 글(textContent)이었다.**
|
|
227
|
+
|
|
228
|
+
**그래도 흠이다 — 다른 흠이다.** 두 `<span>` 사이에 아무것도 없어 **낭독기와 글 긁기**가 붙여 읽는다.
|
|
229
|
+
한국어도 같다(`대표한지혜`). 빈칸 하나를 둬 그 가름을 **글에** 넣었다(벌리는 일은 CSS 몫 그대로).
|
|
230
|
+
|
|
231
|
+
### (120) 품사·어종이 한국어로 남았다 — **번역이 숨어 있었다**
|
|
232
|
+
|
|
233
|
+
영어 화면 낱말 정보 줄이 한 줄 안에서 섞였다(`Grade 3 · 명사 · 혼종어 · … · Homonym 1`).
|
|
234
|
+
**까닭은 번역이 없어서가 아니었다** — 사전에 품사 열셋·어종 넷이 다 있었고 번역하는 함수도 있었다.
|
|
235
|
+
그 함수가 **`WordTable` 안에만 숨어 있었다.** 밖에서 쓸 수 있는 것은 날 한국어 표(`POS_LABEL`)뿐이라
|
|
236
|
+
앱이 그것을 썼다.
|
|
237
|
+
|
|
238
|
+
> **공개된 것이 하나뿐이면 쓰는 쪽에 고를 길이 없다.** 번역을 `wordTableLayout` 으로 올려 같이
|
|
239
|
+
> 공개한다 — `posLabels(t)` · `wordTypeLabels(t)` · `WORD_LABEL_I18N_KEYS`. 날 표 둘은 **그대로
|
|
240
|
+
> 내보낸다**(한국어 전체 표기가 필요한 자리가 있다) — 다만 화면에 그릴 때는 새 둘을 쓴다.
|
|
241
|
+
|
|
242
|
+
못이 **약호마다 두 사전에 말이 있나**를 센다 — 자료에 새 약호가 오면(열쇠표만 늘리면) 운다.
|
|
243
|
+
*분야*(`정보·통신`)는 **안 건드렸다** — 사전 표의 자유 글이라 가짓수가 닫혀 있지 않고, 낱말
|
|
244
|
+
뜻풀이와 같은 알맹이다(말귀도 그렇게 봤다).
|
|
245
|
+
|
|
246
|
+
### 이름을 박아 둔 못 하나가 또 걸렸다
|
|
247
|
+
|
|
248
|
+
`badgeLabelOwnership` 이 `nav.badgeInsideLabel` 을 **밑열쇠 이름 그대로** 찾아, 복수형으로 갈리자
|
|
249
|
+
울었다 — 뜻(*두 사전에 다 있고 자리표 둘을 쓴다*)은 그대로인데 이름만 갈렸다. *밑열쇠 또는 그
|
|
250
|
+
복수형들*로 보게 고쳤다. **어제 맞춘 그 말이 하루에 두 번 걸렸다** — 이름을 박으면 고치는 쪽이 막힌다.
|
|
251
|
+
|
|
10
252
|
## 0.314.0
|
|
11
253
|
|
|
12
254
|
### (116) `LISTEN_IN_NOISE` 의 아이콘 — **폭죽(🎉)을 걷었다**
|