Merge branch 'feat-gh-pages' into gh-pages

pull/388/head
仿生狮子 3 years ago
parent 34048699f7
commit 2f56c4ebec

4
.gitignore vendored

@ -2,3 +2,7 @@
/tools/chromium_extension/node_modules
/tools/chromium_extension/package-lock.json
/.idea
node_modules
.DS_Store
*.local
source

@ -0,0 +1,3 @@
* vite 在有道的读音是错的
* Ubuntu 在有道的读音是错的
* 使用 github action 自动重编译静态页面

@ -1,155 +1,148 @@
## Words Commonly Mispronounced by Chinese Programmers
## 中国程序员容易发音错误的单词(点击🔊收听正确读音)
# 中国程序员容易发音错误的单词
### 重要更新
Words Commonly Mispronounced by Chinese Programmers
- chromium扩展无页面跳转实时检索英语发音
- 安装 [chromium 扩展](tools/chromium_extension/README.md) 或者
- [外部独立库](https://github.com/jingjingxyk/chinese-programmer-wrong-pronunciation-chromium-extension.git)
- 简洁的单词列表正确读音不用再打开新网页https://cpwp.netlify.app/
- [iOS应用](https://apps.apple.com/cn/app/%E7%8C%BF%E5%8D%95%E8%AF%8D-%E4%B8%AD%E5%9B%BD%E7%A8%8B%E5%BA%8F%E5%91%98%E5%AE%B9%E6%98%93%E5%8F%91%E9%9F%B3%E9%94%99%E8%AF%AF%E7%9A%84%E5%8D%95%E8%AF%8D/id1626487291)
## 单词表
点击🔊收听正确读音
<!-- Table Generate Start -->
| 单词 | 正确发音(英音)| 正确发音(美音)| 错误发音 |
| --- | ----------- | ----------- | ---------- |
| access | [🔊](https://lionad-morotar.github.io/chinese-programmer-wrong-pronunciation/index.html?audio=access&type=1) /'ækses/ | [🔊](https://lionad-morotar.github.io/chinese-programmer-wrong-pronunciation/index.html?audio=access&type=2) /ˈækses/ | ❌ /ək'ses/ |
| Adobe | [🔊](https://lionad-morotar.github.io/chinese-programmer-wrong-pronunciation/index.html?audio=Adobe&type=1) /ə'dəʊbi/ | [🔊](https://lionad-morotar.github.io/chinese-programmer-wrong-pronunciation/index.html?audio=Adobe&type=2) /ə'dəʊbi/ | ❌ /əˈdub/ |
| admin | [🔊](https://lionad-morotar.github.io/chinese-programmer-wrong-pronunciation/index.html?audio=admin&type=1) /'ædmɪn/ | [🔊](https://lionad-morotar.github.io/chinese-programmer-wrong-pronunciation/index.html?audio=admin&type=2) /ˈædmɪn/ | ❌ /ɜ:d'mɪn/ |
| adversarial | [🔊](https://lionad-morotar.github.io/chinese-programmer-wrong-pronunciation/index.html?audio=adversarial&type=1) /ˌædvəˈseəriəl/ | [🔊](https://lionad-morotar.github.io/chinese-programmer-wrong-pronunciation/index.html?audio=adversarial&type=2) /ˌædvərˈseriəl/ | ❌ /ədˈːrsəriəl/ |
| agile | [🔊](https://lionad-morotar.github.io/chinese-programmer-wrong-pronunciation/index.html?audio=agile&type=1) /'ædʒaɪl/ | [🔊](https://lionad-morotar.github.io/chinese-programmer-wrong-pronunciation/index.html?audio=agile&type=2) /ˈædʒl/ | ❌ /ə'dʒaɪl/ |
| amazon | [🔊](https://lionad-morotar.github.io/chinese-programmer-wrong-pronunciation/index.html?audio=amazon&type=1) /'æməzən/ | [🔊](https://lionad-morotar.github.io/chinese-programmer-wrong-pronunciation/index.html?audio=amazon&type=2) /ˈæməzɑːn/ | ❌ /'əmeizən/ /ə'meizən/ |
| analogy | [🔊](https://lionad-morotar.github.io/chinese-programmer-wrong-pronunciation/index.html?audio=analogy&type=1) /əˈnælədʒi/ | [🔊](https://lionad-morotar.github.io/chinese-programmer-wrong-pronunciation/index.html?audio=analogy&type=2) /əˈnælədʒi/ | ❌ /ænə'lɒdʒi/ |
| Angular | [🔊](https://lionad-morotar.github.io/chinese-programmer-wrong-pronunciation/index.html?audio=Angular&type=1) /'æŋgjʊlə/ | [🔊](https://lionad-morotar.github.io/chinese-programmer-wrong-pronunciation/index.html?audio=Angular&type=2) /ˈæŋɡjələr/ | ❌ /'æŋɡələ/ /'æŋdʒʌlə/ |
| AJAX | [🔊](https://lionad-morotar.github.io/chinese-programmer-wrong-pronunciation/index.html?audio=AJAX&type=1) /'eidʒæks/ | [🔊](https://lionad-morotar.github.io/chinese-programmer-wrong-pronunciation/index.html?audio=AJAX&type=2) /'eidʒæks/ | ❌ /ə'dʒʌks/ |
| alias | [🔊](https://lionad-morotar.github.io/chinese-programmer-wrong-pronunciation/index.html?audio=alias&type=1) /ˈeɪliəs/ | [🔊](https://lionad-morotar.github.io/chinese-programmer-wrong-pronunciation/index.html?audio=alias&type=2) /ˈeɪliəs/ | ❌ /ə'lais/ |
| Apache | [🔊](https://lionad-morotar.github.io/chinese-programmer-wrong-pronunciation/index.html?audio=Apache&type=1) /ə'pætʃɪ/ | [🔊](https://lionad-morotar.github.io/chinese-programmer-wrong-pronunciation/index.html?audio=Apache&type=2) /əˈpætʃi/ | ❌ /ʌpʌtʃ/ |
| app | [🔊](https://lionad-morotar.github.io/chinese-programmer-wrong-pronunciation/index.html?audio=app&type=1) /æp/ | [🔊](https://lionad-morotar.github.io/chinese-programmer-wrong-pronunciation/index.html?audio=app&type=2) /æp/ | ❌ /eipi'pi/ |
| archive | [🔊](https://lionad-morotar.github.io/chinese-programmer-wrong-pronunciation/index.html?audio=archive&type=1) /'ɑːkaɪv/ | [🔊](https://lionad-morotar.github.io/chinese-programmer-wrong-pronunciation/index.html?audio=archive&type=2) /'ɑːkaɪv/ | ❌ /'ətʃɪv/ |
| array | [🔊](https://lionad-morotar.github.io/chinese-programmer-wrong-pronunciation/index.html?audio=array&type=1) /ə'rei/ | [🔊](https://lionad-morotar.github.io/chinese-programmer-wrong-pronunciation/index.html?audio=array&type=2) /əˈreɪ/ | ❌ /æ'rei/ |
| ASCII | [🔊](https://lionad-morotar.github.io/chinese-programmer-wrong-pronunciation/index.html?audio=ascii&type=1) /'æski/ | [🔊](https://lionad-morotar.github.io/chinese-programmer-wrong-pronunciation/index.html?audio=ascii&type=2) /ˈæski/ | ❌ /ɑːsk/ |
| aspect | [🔊](https://lionad-morotar.github.io/chinese-programmer-wrong-pronunciation/index.html?audio=aspect&type=1) /'æspekt/ | [🔊](https://lionad-morotar.github.io/chinese-programmer-wrong-pronunciation/index.html?audio=aspect&type=2) /ˈæspekt/ | ❌ /ə'spekt/ |
| async | [🔊](https://lionad-morotar.github.io/chinese-programmer-wrong-pronunciation/index.html?audio=async&type=1) /əˈsɪŋk/ | [🔊](https://lionad-morotar.github.io/chinese-programmer-wrong-pronunciation/index.html?audio=async&type=2) /æˈsɪŋk/ | ❌ /'æsɪŋk/ |
| avatar | [🔊](https://lionad-morotar.github.io/chinese-programmer-wrong-pronunciation/index.html?audio=avatar&type=1) /'ævətɑː/ | [🔊](https://lionad-morotar.github.io/chinese-programmer-wrong-pronunciation/index.html?audio=avatar&type=2) /ˈævətɑːr/ | ❌ /ə'vʌtɑ/ |
| Azure | [🔊](https://lionad-morotar.github.io/chinese-programmer-wrong-pronunciation/index.html?audio=azure&type=1) /'æʒə/ | [🔊](https://lionad-morotar.github.io/chinese-programmer-wrong-pronunciation/index.html?audio=azure&type=2) /ˈæʒər/ | ❌ /ˈæzʊʒə/ |
| bind | [🔊](https://lionad-morotar.github.io/chinese-programmer-wrong-pronunciation/index.html?audio=bind&type=1) /baɪnd/ | [🔊](https://lionad-morotar.github.io/chinese-programmer-wrong-pronunciation/index.html?audio=bind&type=2) /baɪnd/ | ❌ /bɪnd/ |
| cache | [🔊](https://lionad-morotar.github.io/chinese-programmer-wrong-pronunciation/index.html?audio=cache&type=1) /kæʃ/ | [🔊](https://lionad-morotar.github.io/chinese-programmer-wrong-pronunciation/index.html?audio=cache&type=2) /kæʃ/ | ❌ /kætʃ/ |
| canal | [🔊](https://lionad-morotar.github.io/chinese-programmer-wrong-pronunciation/index.html?audio=canal&type=1) /kəˈnæl/ | [🔊](https://lionad-morotar.github.io/chinese-programmer-wrong-pronunciation/index.html?audio=canal&type=2) /kəˈnæl/ | ❌ /ˈkænl/ |
| Chrome | [🔊](https://lionad-morotar.github.io/chinese-programmer-wrong-pronunciation/index.html?audio=chrome&type=1) /krəʊm/ | [🔊](https://lionad-morotar.github.io/chinese-programmer-wrong-pronunciation/index.html?audio=chrome&type=2) /kroʊm/ | ❌ /tʃɔːm/ |
| clang | [🔊](https://lionad-morotar.github.io/chinese-programmer-wrong-pronunciation/index.html?audio=clang&type=1) /klæŋ/ | [🔊](https://lionad-morotar.github.io/chinese-programmer-wrong-pronunciation/index.html?audio=clang&type=2) /klæŋ/ | ❌ /sɪlæŋ/ |
| Coq | [🔊](https://upload.wikimedia.org/wikipedia/commons/4/47/Fr-coq.ogg) IPA French ['kɔkʲ] 读若拼音“goq” | | ❌ IPA English ['kʰɒk] |
| daemon | [🔊](https://lionad-morotar.github.io/chinese-programmer-wrong-pronunciation/index.html?audio=Daemon&type=1) /'diːmən/ | [🔊](https://lionad-morotar.github.io/chinese-programmer-wrong-pronunciation/index.html?audio=Daemon&type=2) /ˈdiːmən/ | ❌ /dæmən/ |
| debt | [🔊](https://lionad-morotar.github.io/chinese-programmer-wrong-pronunciation/index.html?audio=debt&type=1) /det/ | [🔊](https://lionad-morotar.github.io/chinese-programmer-wrong-pronunciation/index.html?audio=debt&type=2) /det/ | ❌ /de'bit/ |
| deny | [🔊](https://lionad-morotar.github.io/chinese-programmer-wrong-pronunciation/index.html?audio=deny&type=1) /dɪ'naɪ/ | [🔊](https://lionad-morotar.github.io/chinese-programmer-wrong-pronunciation/index.html?audio=deny&type=2) /dɪˈnaɪ/ | ❌ /'dæni/ |
| deprecate | [🔊](https://lionad-morotar.github.io/chinese-programmer-wrong-pronunciation/index.html?audio=deprecate&type=1) /ˈdeprəkeɪt/ | [🔊](https://lionad-morotar.github.io/chinese-programmer-wrong-pronunciation/index.html?audio=deprecate&type=2) /ˈdeprəkeɪt/ | |
| deque | [🔊](https://lionad-morotar.github.io/chinese-programmer-wrong-pronunciation/index.html?audio=deque&type=1) /'dek/ | [🔊](https://lionad-morotar.github.io/chinese-programmer-wrong-pronunciation/index.html?audio=deque&type=2) /dɛk/ | ❌ /di'kju/ |
| digest | [🔊](https://lionad-morotar.github.io/chinese-programmer-wrong-pronunciation/index.html?audio=digest&type=1) n. /'dɑɪdʒɛst/ v. /dɑɪ'dʒɛst/ | [🔊](https://lionad-morotar.github.io/chinese-programmer-wrong-pronunciation/index.html?audio=digest&type=2) /daɪˈdʒest,dɪˈdʒest/ | ❌ /'dɪgɛst/ |
| Dijkstra | [🔊](https://upload.wikimedia.org/wikipedia/commons/8/85/Dijkstra.ogg) Dutch:/ˈdɛikstra/ English:/ˈdaɪkstrə/ | [🔊](https://upload.wikimedia.org/wikipedia/commons/8/85/Dijkstra.ogg) | |
| Django | [🔊](https://lionad-morotar.github.io/chinese-programmer-wrong-pronunciation/index.html?audio=Django&type=1) /ˈdʒæŋɡoʊ/ | [🔊](https://lionad-morotar.github.io/chinese-programmer-wrong-pronunciation/index.html?audio=Django&type=2) /ˈdʒæŋɡoʊ/ | ❌ /diˈdʒæŋɡoʊ/ |
| doc | [🔊](https://lionad-morotar.github.io/chinese-programmer-wrong-pronunciation/index.html?audio=doc&type=1) /dɒk/ | [🔊](https://lionad-morotar.github.io/chinese-programmer-wrong-pronunciation/index.html?audio=doc&type=2) /dɒk/ | ❌ /daʊk/ |
| dotnet | [🔊](https://lionad-morotar.github.io/chinese-programmer-wrong-pronunciation/index.html?audio=dotnet&type=1) /dɒtnet/ | [🔊](https://lionad-morotar.github.io/chinese-programmer-wrong-pronunciation/index.html?audio=dotnet&type=2) /dɑːtnet/ | ❌ /daʊtnet/ |
| edition | [🔊](https://lionad-morotar.github.io/chinese-programmer-wrong-pronunciation/index.html?audio=edition&type=1) /ɪˈdɪʃ(ə)n/ | [🔊](https://lionad-morotar.github.io/chinese-programmer-wrong-pronunciation/index.html?audio=edition&type=2) /ɪˈdɪʃn/ | ❌ /eˈdɪʃn/ |
| ephemeral | [🔊](https://lionad-morotar.github.io/chinese-programmer-wrong-pronunciation/index.html?audio=ephemeral&type=1) /ɪˈfemərəl/ | [🔊](https://lionad-morotar.github.io/chinese-programmer-wrong-pronunciation/index.html?audio=ephemeral&type=2) /ɪˈfemərəl/ | ❌ /daʊtnet/ |
| epoch | [🔊](https://lionad-morotar.github.io/chinese-programmer-wrong-pronunciation/index.html?audio=epoch&type=1) /ˈiːpɒk/ | [🔊](https://lionad-morotar.github.io/chinese-programmer-wrong-pronunciation/index.html?audio=epoch&type=2) /ˈepək/ | ❌ /'ɛpətʃ/ |
| execute | [🔊](https://lionad-morotar.github.io/chinese-programmer-wrong-pronunciation/index.html?audio=execute&type=1) /ˈeksɪkjuːt/ | [🔊](https://lionad-morotar.github.io/chinese-programmer-wrong-pronunciation/index.html?audio=execute&type=2) /ˈeksɪkjuːt/ | |
| executor | [🔊](https://lionad-morotar.github.io/chinese-programmer-wrong-pronunciation/index.html?audio=executor&type=1) /ɪɡˈzekjətə(r)/ | [🔊](https://lionad-morotar.github.io/chinese-programmer-wrong-pronunciation/index.html?audio=executor&type=2) /ɪɡˈzekjətər/ | |
| event | [🔊](https://lionad-morotar.github.io/chinese-programmer-wrong-pronunciation/index.html?audio=event&type=1) /ɪ'vent/ | [🔊](https://lionad-morotar.github.io/chinese-programmer-wrong-pronunciation/index.html?audio=event&type=2) /ɪˈvent/ | ❌ /'ɪvənt/ |
| exit | [🔊](https://lionad-morotar.github.io/chinese-programmer-wrong-pronunciation/index.html?audio=exit&type=1) /ˈeksɪt/ | [🔊](https://lionad-morotar.github.io/chinese-programmer-wrong-pronunciation/index.html?audio=exit&type=2) /ˈeksɪt; ˈeɡzɪt/ | ❌ /ig'zit/ |
| facade | [🔊](https://lionad-morotar.github.io/chinese-programmer-wrong-pronunciation/index.html?audio=facade&type=1) /fə'sɑːd/ | [🔊](https://lionad-morotar.github.io/chinese-programmer-wrong-pronunciation/index.html?audio=facade&type=2) /fəˈsɑːd/ | ❌ /'feikeid/ |
| fedora | [🔊](https://lionad-morotar.github.io/chinese-programmer-wrong-pronunciation/index.html?audio=fedora&type=1) /fɪ'dɔːrə/ | [🔊](https://lionad-morotar.github.io/chinese-programmer-wrong-pronunciation/index.html?audio=fedora&type=2) /fɪˈːrə/ | ❌ /'fedərə/ |
| format | [🔊](https://lionad-morotar.github.io/chinese-programmer-wrong-pronunciation/index.html?audio=format&type=1) /'fɔːmæt/ | [🔊](https://lionad-morotar.github.io/chinese-programmer-wrong-pronunciation/index.html?audio=format&type=2) /ˈːrmæt/ | ❌ /fɔ'mæt/ |
| gauge | [🔊](https://lionad-morotar.github.io/chinese-programmer-wrong-pronunciation/index.html?audio=gauge&type=1) /ɡeɪdʒ/ | [🔊](https://lionad-morotar.github.io/chinese-programmer-wrong-pronunciation/index.html?audio=gauge&type=2) /ɡeɪdʒ/ | ❌ /ɡɑudʒ/ |
| Git | [🔊](https://lionad-morotar.github.io/chinese-programmer-wrong-pronunciation/index.html?audio=git&type=1) /ɡɪt/ | [🔊](https://lionad-morotar.github.io/chinese-programmer-wrong-pronunciation/index.html?audio=git&type=2) /ɡɪt/ | ❌ /dʒɪt/ |
| GNU | [🔊](https://upload.wikimedia.org/wikipedia/commons/2/24/En-gnu.ogg) /gnu:/ | [🔊](https://upload.wikimedia.org/wikipedia/commons/2/24/En-gnu.ogg) /gnuː,gnjuː/ | |
| Grafana | [🔊](http://www.howtopronounce.cc/file/e204a97ed1e440c5ab15ea0117beb955.mp3) /grəˈfɑːɑː/ | [🔊](http://www.howtopronounce.cc/file/e204a97ed1e440c5ab15ea0117beb955.mp3 ) /grəˈfɑːɑː/ | |
| GraphQL | [🔊](https://lionad-morotar.github.io/chinese-programmer-wrong-pronunciation/index.html?audio=GraphQL&type=1) /græf kju ɛl/ | [🔊](https://lionad-morotar.github.io/chinese-programmer-wrong-pronunciation/index.html?audio=GraphQL&type=2) /græf kju ɛl/ | ❌ /dʒɪgræf kju ɛl/ |
| GUI | [🔊](https://lionad-morotar.github.io/chinese-programmer-wrong-pronunciation/index.html?audio={GUI}&type=1) /ˈɡu:i/ | [🔊](https://lionad-morotar.github.io/chinese-programmer-wrong-pronunciation/index.html?audio={GUI}&type=2) /ˈɡu:i/ | |
| Haskell | [🔊](https://lionad-morotar.github.io/chinese-programmer-wrong-pronunciation/index.html?audio=haskell&type=1) /ˈhæskəl/ | [🔊](https://lionad-morotar.github.io/chinese-programmer-wrong-pronunciation/index.html?audio=haskell&type=2) /ˈhæskəl/ | ❌ /hæˈskəl/ |
| height | [🔊](https://lionad-morotar.github.io/chinese-programmer-wrong-pronunciation/index.html?audio=height&type=1) /haɪt/ | [🔊](https://lionad-morotar.github.io/chinese-programmer-wrong-pronunciation/index.html?audio=height&type=2) /haɪt/ | ❌ /heɪt/ |
| hidden | [🔊](https://lionad-morotar.github.io/chinese-programmer-wrong-pronunciation/index.html?audio=hidden&type=1) /'hɪdn/ | [🔊](https://lionad-morotar.github.io/chinese-programmer-wrong-pronunciation/index.html?audio=hidden&type=2) /ˈhɪdn/ | ❌ /'haɪdn/ |
| image | [🔊](https://lionad-morotar.github.io/chinese-programmer-wrong-pronunciation/index.html?audio=image&type=1) /'ɪmɪdʒ/ | [🔊](https://lionad-morotar.github.io/chinese-programmer-wrong-pronunciation/index.html?audio=image&type=2) /ˈɪmɪdʒ/ | ❌ /ɪ'meɪdʒ/ |
| implement | [🔊](https://lionad-morotar.github.io/chinese-programmer-wrong-pronunciation/index.html?audio=implement&type=1) /'ɪmplɪm(ə)nt/ | [🔊](https://lionad-morotar.github.io/chinese-programmer-wrong-pronunciation/index.html?audio=implement&type=2) /ˈɪmplɪmənt/ /ˈɪmpləˌment/ | ❌ /ɪm'plem(ə)nt/ |
| integer | [🔊](https://lionad-morotar.github.io/chinese-programmer-wrong-pronunciation/index.html?audio=integer&type=1) /'ɪntɪdʒə/ | [🔊](https://lionad-morotar.github.io/chinese-programmer-wrong-pronunciation/index.html?audio=integer&type=2) /ˈɪntɪdʒər/ | ❌ /ˈɪntaɪgə/ |
| issue | [🔊](https://lionad-morotar.github.io/chinese-programmer-wrong-pronunciation/index.html?audio=issue&type=1) /'ɪʃuː/ | [🔊](https://lionad-morotar.github.io/chinese-programmer-wrong-pronunciation/index.html?audio=issue&type=2) /ˈɪʃuː/ | ❌ /ˈaɪʃuː/ |
| Java | [🔊](https://lionad-morotar.github.io/chinese-programmer-wrong-pronunciation/index.html?audio=java&type=1) /'dʒɑːvə/ | [🔊](https://lionad-morotar.github.io/chinese-programmer-wrong-pronunciation/index.html?audio=java&type=2) /ˈɑːvə/ | |
| jpg| [🔊](https://lionad-morotar.github.io/chinese-programmer-wrong-pronunciation/index.html?audio=JPEG&type=1) /'dʒeɪpeɡ/ | [🔊](https://lionad-morotar.github.io/chinese-programmer-wrong-pronunciation/index.html?audio=JPEG&type=2) /'dʒeɪpeɡ/ | ❌ /ˈdʒeɪˈpi:ˈdʒiː/ |
| key | [🔊](https://lionad-morotar.github.io/chinese-programmer-wrong-pronunciation/index.html?audio=key&type=1) /kiː/ | [🔊](https://lionad-morotar.github.io/chinese-programmer-wrong-pronunciation/index.html?audio=key&type=2) /kiː/ | ❌ /kei/ |
| Kubernetes* | [🔊](https://lionad-morotar.github.io/chinese-programmer-wrong-pronunciation/index.html?audio=Kubernetes&type=2) /kubз'netɪs/ | [🔊](https://lionad-morotar.github.io/chinese-programmer-wrong-pronunciation/index.html?audio=Kubernetes&type=2) /kuːbə˞'netiz/ | |
| lambda | [🔊](https://lionad-morotar.github.io/chinese-programmer-wrong-pronunciation/index.html?audio=lambda&type=1) /ˈlæmdə/ | [🔊](https://lionad-morotar.github.io/chinese-programmer-wrong-pronunciation/index.html?audio=lambda&type=2) /ˈlæmdə/ | ❌ /ˈlɒŋmdɑ/ |
| Ldap | [🔊](https://lionad-morotar.github.io/chinese-programmer-wrong-pronunciation/index.html?audio=ldap&type=1) /el'dæp/ | [🔊](https://lionad-morotar.github.io/chinese-programmer-wrong-pronunciation/index.html?audio=ldap&type=2) /el'dæp/ | ❌ /el'daːp/ |
| linear | [🔊](https://lionad-morotar.github.io/chinese-programmer-wrong-pronunciation/index.html?audio=linear&type=1) /'lɪnɪə/ | [🔊](https://lionad-morotar.github.io/chinese-programmer-wrong-pronunciation/index.html?audio=linear&type=2) /ˈlɪniər/ | ❌ /'laɪə/ |
| LINQ | [🔊](https://lionad-morotar.github.io/chinese-programmer-wrong-pronunciation/index.html?audio=link&type=1) /lɪŋk/ | [🔊](https://lionad-morotar.github.io/chinese-programmer-wrong-pronunciation/index.html?audio=link&type=2) /lɪŋk/ | ❌ /lɪŋkju:/ |
| Linux | [🔊](https://lionad-morotar.github.io/chinese-programmer-wrong-pronunciation/index.html?audio=linux&type=1) /'lɪnəks/ | [🔊](https://lionad-morotar.github.io/chinese-programmer-wrong-pronunciation/index.html?audio=linux&type=2) /ˈlaɪnəks/ /ˈlɪnəks/ | ❌ /ˈlɪnʌks/ /ˈlɪnjuːks/ |
| locale | [🔊](https://lionad-morotar.github.io/chinese-programmer-wrong-pronunciation/index.html?audio=locale&type=1) /ləʊ'kɑːl/ | [🔊](https://lionad-morotar.github.io/chinese-programmer-wrong-pronunciation/index.html?audio=locale&type=2) /loʊˈkæl/ | ❌ /ˈloʊk(ə)l/ |
| Lucene | [🔊](https://lionad-morotar.github.io/chinese-programmer-wrong-pronunciation/index.html?audio=lucene&type=1) /lu'siːn/ | [🔊](https://lionad-morotar.github.io/chinese-programmer-wrong-pronunciation/index.html?audio=lucene&type=2) /lu'siːn/ | ❌ /'lu:sən/ |
| macro | [🔊](https://lionad-morotar.github.io/chinese-programmer-wrong-pronunciation/index.html?audio=macro&type=1) /ˈmækrəʊ/ | [🔊](https://lionad-morotar.github.io/chinese-programmer-wrong-pronunciation/index.html?audio=macro&type=2) /ˈmækroʊ/ | ❌ /ˈmakroʊ/ |
| main | [🔊](https://lionad-morotar.github.io/chinese-programmer-wrong-pronunciation/index.html?audio=main&type=1) /meɪn/ | [🔊](https://lionad-morotar.github.io/chinese-programmer-wrong-pronunciation/index.html?audio=main&type=2) /meɪn/ | ❌ /mɪn/ |
| margin | [🔊](https://lionad-morotar.github.io/chinese-programmer-wrong-pronunciation/index.html?audio=margin&type=1) /'mɑːɪn/ | [🔊](https://lionad-morotar.github.io/chinese-programmer-wrong-pronunciation/index.html?audio=margin&type=2) /ˈmɑːrdʒɪn/ | ❌ /'mʌgɪn/ |
| matrix | [🔊](https://lionad-morotar.github.io/chinese-programmer-wrong-pronunciation/index.html?audio=matrix&type=1) /ˈmeɪtrɪks/ | [🔊](https://lionad-morotar.github.io/chinese-programmer-wrong-pronunciation/index.html?audio=matrix&type=2) /ˈmeɪtrɪks/ | ❌ /ˈmɑ:trɪks/ |
| maven | [🔊](https://lionad-morotar.github.io/chinese-programmer-wrong-pronunciation/index.html?audio=maven&type=1) /'meɪvn/ | [🔊](https://lionad-morotar.github.io/chinese-programmer-wrong-pronunciation/index.html?audio=maven&type=2) /ˈmeɪvn/ | ❌ /'maːvn/ |
| max | [🔊](https://lionad-morotar.github.io/chinese-programmer-wrong-pronunciation/index.html?audio=max&type=1) /mæks/ | [🔊](https://lionad-morotar.github.io/chinese-programmer-wrong-pronunciation/index.html?audio=max&type=2) /mæks/ | ❌ /mɑ:ks/ |
| Microsoft | [🔊](https://lionad-morotar.github.io/chinese-programmer-wrong-pronunciation/index.html?audio=Microsoft&type=1) /'maikrəusɔft/ | [🔊](https://lionad-morotar.github.io/chinese-programmer-wrong-pronunciation/index.html?audio=Microsoft&type=2) /ˈmaɪkrəsɔːft/ | ❌ /'mikrəusɔft/ |
| miscellaneous | [🔊](https://lionad-morotar.github.io/chinese-programmer-wrong-pronunciation/index.html?audio=miscellaneous&type=1) /ˌmɪˈleɪniəs/ | [🔊](https://lionad-morotar.github.io/chinese-programmer-wrong-pronunciation/index.html?audio=miscellaneous&type=2) /ˌmɪˈleɪniəs/ | |
| module | [🔊](https://lionad-morotar.github.io/chinese-programmer-wrong-pronunciation/index.html?audio=module&type=1) /'mɒdjuːl/ | [🔊](https://lionad-morotar.github.io/chinese-programmer-wrong-pronunciation/index.html?audio=module&type=2) /ˈmɑːdʒuːl/ | ❌ /'məʊdl/ |
| native | [🔊](https://lionad-morotar.github.io/chinese-programmer-wrong-pronunciation/index.html?audio=native&type=1) /ˈneɪtɪv/ | [🔊](https://lionad-morotar.github.io/chinese-programmer-wrong-pronunciation/index.html?audio=native&type=2) /ˈneɪtɪv/ | ❌ /ˈnætɪv/ |
| nginx | Engine X | Engine X | |
| null | [🔊](https://lionad-morotar.github.io/chinese-programmer-wrong-pronunciation/index.html?audio=null&type=1) /nʌl/ | [🔊](https://lionad-morotar.github.io/chinese-programmer-wrong-pronunciation/index.html?audio=null&type=2) /nʌl/ | ❌ /naʊ/ |
| obsolete | [🔊](https://lionad-morotar.github.io/chinese-programmer-wrong-pronunciation/index.html?audio=obsolete&type=1) /ˈɒbsəliːt/ | [🔊](https://lionad-morotar.github.io/chinese-programmer-wrong-pronunciation/index.html?audio=obsolete&type=2) /ˌɑːbsəˈliːt/ | |
| OS X | OS ten | OS ten | ❌ /ɔs eks/ |
| phantom | [🔊](https://lionad-morotar.github.io/chinese-programmer-wrong-pronunciation/index.html?audio=phantom&type=1) /'fæntəm/ | [🔊](https://lionad-morotar.github.io/chinese-programmer-wrong-pronunciation/index.html?audio=phantom&type=2) /ˈfæntəm/ | ❌ /'pæntəm/ |
| parameter | [🔊](https://lionad-morotar.github.io/chinese-programmer-wrong-pronunciation/index.html?audio=parameter&type=1) /pə'ræmɪtə/ | [🔊](https://lionad-morotar.github.io/chinese-programmer-wrong-pronunciation/index.html?audio=parameter&type=2) /pəˈræmɪtər/ | ❌ /'pærəmɪtə/ |
| privilege | [🔊](https://lionad-morotar.github.io/chinese-programmer-wrong-pronunciation/index.html?audio=privilege&type=1) /'prɪvəlɪdʒ/ | [🔊](https://lionad-morotar.github.io/chinese-programmer-wrong-pronunciation/index.html?audio=privilege&type=2) /ˈprɪvəlɪdʒ/ | ❌ /'prɪvɪlɪdʒ/ |
| probe | [🔊](https://lionad-morotar.github.io/chinese-programmer-wrong-pronunciation/index.html?audio=probe&type=1) /prəʊb/ | [🔊](https://lionad-morotar.github.io/chinese-programmer-wrong-pronunciation/index.html?audio=probe&type=2) /proʊb/ | ❌ /proʊbi/ |
| Prometheus | [🔊](https://lionad-morotar.github.io/chinese-programmer-wrong-pronunciation/index.html?audio=prometheus&type=1) /prə-ˈmē-thē-əs/ | [🔊](https://lionad-morotar.github.io/chinese-programmer-wrong-pronunciation/index.html?audio=prometheus&type=2) /pro'miθɪəs/ | |
| putty | [🔊](https://lionad-morotar.github.io/chinese-programmer-wrong-pronunciation/index.html?audio=putty&type=1) /ˈpʌti/ | [🔊](https://lionad-morotar.github.io/chinese-programmer-wrong-pronunciation/index.html?audio=putty&type=2) /ˈpʌti/ | ❌ /ˈpuːti/ |
| Qt | [🔊](https://lionad-morotar.github.io/chinese-programmer-wrong-pronunciation/index.html?audio=cute&type=1) /kjuːt/ | [🔊](https://lionad-morotar.github.io/chinese-programmer-wrong-pronunciation/index.html?audio=cute&type=2) /kjuːt/ | |
| query | [🔊](https://lionad-morotar.github.io/chinese-programmer-wrong-pronunciation/index.html?audio=query&type=1) /'kwɪəri/ | [🔊](https://lionad-morotar.github.io/chinese-programmer-wrong-pronunciation/index.html?audio=query&type=2) /ˈkwɪri/ | ❌ /'kwaɪri/ |
| Realm | [🔊](https://lionad-morotar.github.io/chinese-programmer-wrong-pronunciation/index.html?audio=realm&type=1) /relm/ | [🔊](https://lionad-morotar.github.io/chinese-programmer-wrong-pronunciation/index.html?audio=realm&type=2) /relm/ | ❌ /riəlm/ |
| reconcile | [🔊](https://lionad-morotar.github.io/chinese-programmer-wrong-pronunciation/index.html?audio=reconcile&type=1) /ˈrekənsaɪl/ | [🔊](https://lionad-morotar.github.io/chinese-programmer-wrong-pronunciation/index.html?audio=reconcile&type=2) /ˈrekənsaɪl/ | |
| Redux | [🔊](https://lionad-morotar.github.io/chinese-programmer-wrong-pronunciation/index.html?audio=redux&type=1) /ri'dʌks/ | [🔊](https://lionad-morotar.github.io/chinese-programmer-wrong-pronunciation/index.html?audio=redux&type=2) /ri'dʌks/ | ❌ /'ridju:ks/ |
| resume | [🔊](https://lionad-morotar.github.io/chinese-programmer-wrong-pronunciation/index.html?audio=resume&type=1) /rɪ'zju:m/ | [🔊](https://lionad-morotar.github.io/chinese-programmer-wrong-pronunciation/index.html?audio=resume&type=2) /rɪˈzuːm/ | ❌ /rɪ'sju:m/ |
| resolved | [🔊](https://lionad-morotar.github.io/chinese-programmer-wrong-pronunciation/index.html?audio=resolved&type=1) /rɪ'zɒlvd/ | [🔊](https://lionad-morotar.github.io/chinese-programmer-wrong-pronunciation/index.html?audio=resolved&type=2) /rɪˈzɑːlvd/ | ❌ /rɪ'səʊvd/ |
| resort | [🔊](https://lionad-morotar.github.io/chinese-programmer-wrong-pronunciation/index.html?audio=resort&type=1) /rɪˈzɔ:t/ | [🔊](https://lionad-morotar.github.io/chinese-programmer-wrong-pronunciation/index.html?audio=resort&type=2) /rɪˈːrt/ | ❌ /rɪˈsɔ:t/ |
| retina | [🔊](https://lionad-morotar.github.io/chinese-programmer-wrong-pronunciation/index.html?audio=retina&type=1) /'retɪnə/ | [🔊](https://lionad-morotar.github.io/chinese-programmer-wrong-pronunciation/index.html?audio=retina&type=2) /ˈretɪnə/ | ❌ /ri'tina/ |
| route | [🔊](https://lionad-morotar.github.io/chinese-programmer-wrong-pronunciation/index.html?audio=route&type=1) /ruːt/ | [🔊](https://lionad-morotar.github.io/chinese-programmer-wrong-pronunciation/index.html?audio=route&type=2) /ruːt,raʊt/ | ❌ /rəʊt/ |
| San Jose | [🔊](https://lionad-morotar.github.io/chinese-programmer-wrong-pronunciation/index.html?audio=san%20jose&type=1) /sænhəu'zei/ | [🔊](https://lionad-morotar.github.io/chinese-programmer-wrong-pronunciation/index.html?audio=san%20jose&type=2) /sænhəu'zei/ | ❌ /sæn'ju:s/ |
| safari | [🔊](https://lionad-morotar.github.io/chinese-programmer-wrong-pronunciation/index.html?audio=safari&type=1) /sə'fɑːrɪ/ | [🔊](https://lionad-morotar.github.io/chinese-programmer-wrong-pronunciation/index.html?audio=safari&type=2) /səˈfɑːri/ | ❌ /sæfərɪ/ |
| scheme | [🔊](https://lionad-morotar.github.io/chinese-programmer-wrong-pronunciation/index.html?audio=scheme&type=1) /skiːm/ | [🔊](https://lionad-morotar.github.io/chinese-programmer-wrong-pronunciation/index.html?audio=scheme&type=2) /skiːm/ | ❌ /s'kæmə/ |
| scala | [🔊](https://lionad-morotar.github.io/chinese-programmer-wrong-pronunciation/index.html?audio=scala&type=1) /ˈskɑːlɑ/ | [🔊](https://lionad-morotar.github.io/chinese-programmer-wrong-pronunciation/index.html?audio=scala&type=2) /ˈskɑːlɑ/ | ❌ /ˈskæːlɑ/ |
| segue | [🔊](https://lionad-morotar.github.io/chinese-programmer-wrong-pronunciation/index.html?audio=segue&type=1) /'sɛɡwe/ | [🔊](https://lionad-morotar.github.io/chinese-programmer-wrong-pronunciation/index.html?audio=segue&type=2) /ˈseɡweɪ/ | ❌ /se'dʒ/ |
| SQL | /ˈsiːkwəl/ /ˈesˈkjuːˈel/ | /ˈsiːkwəl/ /ˈesˈkjuːˈel/ | |
| sudo | /'suːduː/ | /'suːduː/ | |
| suite | [🔊](https://lionad-morotar.github.io/chinese-programmer-wrong-pronunciation/index.html?audio=suite&type=1) /swiːt/ | [🔊](https://lionad-morotar.github.io/chinese-programmer-wrong-pronunciation/index.html?audio=suite&type=2) /swiːt/ | ❌ /sjuːt/ |
| telemetry | [🔊](https://lionad-morotar.github.io/chinese-programmer-wrong-pronunciation/index.html?audio=telemetry&type=1) /təˈlemətri/ | [🔊](https://lionad-morotar.github.io/chinese-programmer-wrong-pronunciation/index.html?audio=telemetry&type=2) /təˈlemətri/ | ❌ /ˈtelɪmətri/ |
| thymeleaf | [🔊](https://lionad-morotar.github.io/chinese-programmer-wrong-pronunciation/index.html?audio=thymeleaf&type=1) /ˈtaɪmˌlɪːf/ | [🔊](https://lionad-morotar.github.io/chinese-programmer-wrong-pronunciation/index.html?audio=thymeleaf&type=2) /ˈtaɪmˌlɪːf/ | ❌ /θiːmɪlɪːf/ |
| tuple | [🔊](https://lionad-morotar.github.io/chinese-programmer-wrong-pronunciation/index.html?audio=tuple&type=1) /tjʊpəl/ | [🔊](https://lionad-morotar.github.io/chinese-programmer-wrong-pronunciation/index.html?audio=tuple&type=2) /tuːpəl/ | |
| typical | [🔊](https://lionad-morotar.github.io/chinese-programmer-wrong-pronunciation/index.html?audio=typical&type=1) /'tɪpɪkl/ | [🔊](https://lionad-morotar.github.io/chinese-programmer-wrong-pronunciation/index.html?audio=typical&type=2) /ˈtɪpɪkl/ | ❌ /'taɪpɪkəl/ |
| Ubuntu | [🔊](http://upload.wikimedia.org/wikipedia/commons/b/b5/En-Ubuntu_pronunciation.oga) /ʊ'bʊntʊ/ | [🔊](http://upload.wikimedia.org/wikipedia/commons/b/b5/En-Ubuntu_pronunciation.oga) /ʊ'bʊntʊ/ | ❌ /juː'bʊntʊ/ |
| Vagrant | [🔊](https://lionad-morotar.github.io/chinese-programmer-wrong-pronunciation/index.html?audio=Vagrant&type=1) /ˈveɪɡrənt/ | [🔊](https://lionad-morotar.github.io/chinese-programmer-wrong-pronunciation/index.html?audio=Vagrant&type=2) /ˈveɪɡrənt/ | /ˈvagɹent/ |
| variable | [🔊](https://lionad-morotar.github.io/chinese-programmer-wrong-pronunciation/index.html?audio=variable&type=1) /'veəriəbl/ | [🔊](https://lionad-morotar.github.io/chinese-programmer-wrong-pronunciation/index.html?audio=variable&type=2) /ˈveriəbl,ˈværiəbl/ | ❌ /və'raiəbl/ |
| verbose | [🔊](https://lionad-morotar.github.io/chinese-programmer-wrong-pronunciation/index.html?audio=verbose&type=1) /vɜːˈbəʊs/ | [🔊](https://lionad-morotar.github.io/chinese-programmer-wrong-pronunciation/index.html?audio=verbose&type=2) /vɜːrˈboʊs/ | ❌ /'vɜːrboʊs/ |
| vue | [🔊](https://lionad-morotar.github.io/chinese-programmer-wrong-pronunciation/index.html?audio=vue&type=1) /v'ju:/ | [🔊](https://lionad-morotar.github.io/chinese-programmer-wrong-pronunciation/index.html?audio=vue&type=2) /v'ju:/ | ❌ /v'ju:i/ |
| width | [🔊](https://lionad-morotar.github.io/chinese-programmer-wrong-pronunciation/index.html?audio=width&type=1) /wɪdθ/ | [🔊](https://lionad-morotar.github.io/chinese-programmer-wrong-pronunciation/index.html?audio=width&type=2) /wɪdθ,wɪtθ/ | ❌ /waɪdθ/ |
| YouTube | [🔊](https://lionad-morotar.github.io/chinese-programmer-wrong-pronunciation/index.html?audio=youtube&type=1) /'juː'tjuːb/ | [🔊](https://lionad-morotar.github.io/chinese-programmer-wrong-pronunciation/index.html?audio=youtube&type=2) /'juː'tjuːb/ | ❌ /'juː'tʊbɪ/ |
| Vite | [🔊](https://lionad-morotar.github.io/chinese-programmer-wrong-pronunciation/index.html?audio=vite&type=1) /vit/ | [🔊](https://lionad-morotar.github.io/chinese-programmer-wrong-pronunciation/index.html?audio=vite&type=2) /vit/ | ❌ /vaɪt/ |
### 附注
* 无页面跳转,页面嵌入搜索引擎和实时检索英语发音,请安装 [chromium 扩展](tools/chromium_extension/README.md)
* [chromium 扩展新增功能截图](tools/chromium_extension/images/README.md)
* 当使用简名 Kube 称呼 Kubernetes 时, 发音则与 cube(/kjuːb/) 一致
### 相关链接
| access | [🔊](https://shimohq.github.io/chinese-programmer-wrong-pronunciation/?audio=access&type=1) /'ækses/ | [🔊](https://shimohq.github.io/chinese-programmer-wrong-pronunciation/?audio=access&type=2) /ˈækses/ | ❌ /ˈækses/ |
| admin | [🔊](https://shimohq.github.io/chinese-programmer-wrong-pronunciation/?audio=admin&type=1) /'ædmɪn/ | [🔊](https://shimohq.github.io/chinese-programmer-wrong-pronunciation/?audio=admin&type=2) /ˈædmɪn/ | ❌ /ˈædmɪn/ |
| Adobe | [🔊](https://shimohq.github.io/chinese-programmer-wrong-pronunciation/?audio=Adobe&type=1) /ə'dəʊbi/ | [🔊](https://shimohq.github.io/chinese-programmer-wrong-pronunciation/?audio=Adobe&type=2) /ə'dəʊbi/ | ❌ /ə'dəʊbi/ |
| adversarial | [🔊](https://shimohq.github.io/chinese-programmer-wrong-pronunciation/?audio=adversarial&type=1) /ˌædvəˈseəriəl/ | [🔊](https://shimohq.github.io/chinese-programmer-wrong-pronunciation/?audio=adversarial&type=2) /ˌædvərˈseriəl/ | ❌ /ˌædvərˈseriəl/ |
| agile | [🔊](https://shimohq.github.io/chinese-programmer-wrong-pronunciation/?audio=agile&type=1) /'ædʒaɪl/ | [🔊](https://shimohq.github.io/chinese-programmer-wrong-pronunciation/?audio=agile&type=2) /ˈædʒl/ | ❌ /ˈædʒl/ |
| AJAX | [🔊](https://shimohq.github.io/chinese-programmer-wrong-pronunciation/?audio=AJAX&type=1) /'eidʒæks/ | [🔊](https://shimohq.github.io/chinese-programmer-wrong-pronunciation/?audio=AJAX&type=2) /'eidʒæks/ | ❌ /'eidʒæks/ |
| alias | [🔊](https://shimohq.github.io/chinese-programmer-wrong-pronunciation/?audio=alias&type=1) /ˈeɪliəs/ | [🔊](https://shimohq.github.io/chinese-programmer-wrong-pronunciation/?audio=alias&type=2) /ˈeɪliəs/ | ❌ /ˈeɪliəs/ |
| amazon | [🔊](https://shimohq.github.io/chinese-programmer-wrong-pronunciation/?audio=amazon&type=1) /'æməzən/ | [🔊](https://shimohq.github.io/chinese-programmer-wrong-pronunciation/?audio=amazon&type=2) /ˈæməzɑːn/ | ❌ /ˈæməzɑːn/ |
| analogy | [🔊](https://shimohq.github.io/chinese-programmer-wrong-pronunciation/?audio=analogy&type=1) /əˈnælədʒi/ | [🔊](https://shimohq.github.io/chinese-programmer-wrong-pronunciation/?audio=analogy&type=2) /əˈnælədʒi/ | ❌ /əˈnælədʒi/ |
| Angular | [🔊](https://shimohq.github.io/chinese-programmer-wrong-pronunciation/?audio=Angular&type=1) /'æŋgjʊlə/ | [🔊](https://shimohq.github.io/chinese-programmer-wrong-pronunciation/?audio=Angular&type=2) /ˈæŋɡjələr/ | ❌ /ˈæŋɡjələr/ |
| Apache | [🔊](https://shimohq.github.io/chinese-programmer-wrong-pronunciation/?audio=Apache&type=1) /ə'pætʃɪ/ | [🔊](https://shimohq.github.io/chinese-programmer-wrong-pronunciation/?audio=Apache&type=2) /əˈpætʃi/ | ❌ /əˈpætʃi/ |
| app | [🔊](https://shimohq.github.io/chinese-programmer-wrong-pronunciation/?audio=app&type=1) /æp/ | [🔊](https://shimohq.github.io/chinese-programmer-wrong-pronunciation/?audio=app&type=2) /æp/ | ❌ /æp/ |
| archive | [🔊](https://shimohq.github.io/chinese-programmer-wrong-pronunciation/?audio=archive&type=1) /'ɑːkaɪv/ | [🔊](https://shimohq.github.io/chinese-programmer-wrong-pronunciation/?audio=archive&type=2) /'ɑːkaɪv/ | ❌ /'ɑːkaɪv/ |
| array | [🔊](https://shimohq.github.io/chinese-programmer-wrong-pronunciation/?audio=array&type=1) /ə'rei/ | [🔊](https://shimohq.github.io/chinese-programmer-wrong-pronunciation/?audio=array&type=2) /əˈreɪ/ | ❌ /əˈreɪ/ |
| ASCII | [🔊](https://shimohq.github.io/chinese-programmer-wrong-pronunciation/?audio=ASCII&type=1) /'æski/ | [🔊](https://shimohq.github.io/chinese-programmer-wrong-pronunciation/?audio=ASCII&type=2) /ˈæski/ | ❌ /ˈæski/ |
| aspect | [🔊](https://shimohq.github.io/chinese-programmer-wrong-pronunciation/?audio=aspect&type=1) /'æspekt/ | [🔊](https://shimohq.github.io/chinese-programmer-wrong-pronunciation/?audio=aspect&type=2) /ˈæspekt/ | ❌ /ˈæspekt/ |
| async | [🔊](https://shimohq.github.io/chinese-programmer-wrong-pronunciation/?audio=async&type=1) /əˈsɪŋk/ | [🔊](https://shimohq.github.io/chinese-programmer-wrong-pronunciation/?audio=async&type=2) /æˈsɪŋk/ | ❌ /æˈsɪŋk/ |
| avatar | [🔊](https://shimohq.github.io/chinese-programmer-wrong-pronunciation/?audio=avatar&type=1) /'ævətɑː/ | [🔊](https://shimohq.github.io/chinese-programmer-wrong-pronunciation/?audio=avatar&type=2) /ˈævətɑːr/ | ❌ /ˈævətɑːr/ |
| Azure | [🔊](https://shimohq.github.io/chinese-programmer-wrong-pronunciation/?audio=Azure&type=1) /'æʒə/ | [🔊](https://shimohq.github.io/chinese-programmer-wrong-pronunciation/?audio=Azure&type=2) /ˈæʒər/ | ❌ /ˈæʒər/ |
| bind | [🔊](https://shimohq.github.io/chinese-programmer-wrong-pronunciation/?audio=bind&type=1) /baɪnd/ | [🔊](https://shimohq.github.io/chinese-programmer-wrong-pronunciation/?audio=bind&type=2) /baɪnd/ | ❌ /baɪnd/ |
| cache | [🔊](https://shimohq.github.io/chinese-programmer-wrong-pronunciation/?audio=cache&type=1) /kæʃ/ | [🔊](https://shimohq.github.io/chinese-programmer-wrong-pronunciation/?audio=cache&type=2) /kæʃ/ | ❌ /kæʃ/ |
| canal | [🔊](https://shimohq.github.io/chinese-programmer-wrong-pronunciation/?audio=canal&type=1) /kəˈnæl/ | [🔊](https://shimohq.github.io/chinese-programmer-wrong-pronunciation/?audio=canal&type=2) /kəˈnæl/ | ❌ /kəˈnæl/ |
| Chrome | [🔊](https://shimohq.github.io/chinese-programmer-wrong-pronunciation/?audio=Chrome&type=1) /krəʊm/ | [🔊](https://shimohq.github.io/chinese-programmer-wrong-pronunciation/?audio=Chrome&type=2) /kroʊm/ | ❌ /kroʊm/ |
| clang | [🔊](https://shimohq.github.io/chinese-programmer-wrong-pronunciation/?audio=clang&type=1) /klæŋ/ | [🔊](https://shimohq.github.io/chinese-programmer-wrong-pronunciation/?audio=clang&type=2) /klæŋ/ | ❌ /klæŋ/ |
| daemon | [🔊](https://shimohq.github.io/chinese-programmer-wrong-pronunciation/?audio=daemon&type=1) /'diːmən/ | [🔊](https://shimohq.github.io/chinese-programmer-wrong-pronunciation/?audio=daemon&type=2) /ˈdiːmən/ | ❌ /ˈdiːmən/ |
| debt | [🔊](https://shimohq.github.io/chinese-programmer-wrong-pronunciation/?audio=debt&type=1) /det/ | [🔊](https://shimohq.github.io/chinese-programmer-wrong-pronunciation/?audio=debt&type=2) /det/ | ❌ /det/ |
| deny | [🔊](https://shimohq.github.io/chinese-programmer-wrong-pronunciation/?audio=deny&type=1) /dɪ'naɪ/ | [🔊](https://shimohq.github.io/chinese-programmer-wrong-pronunciation/?audio=deny&type=2) /dɪˈnaɪ/ | ❌ /dɪˈnaɪ/ |
| deprecate | [🔊](https://shimohq.github.io/chinese-programmer-wrong-pronunciation/?audio=deprecate&type=1) /ˈdeprəkeɪt/ | [🔊](https://shimohq.github.io/chinese-programmer-wrong-pronunciation/?audio=deprecate&type=2) /ˈdeprəkeɪt/ | - |
| deque | [🔊](https://shimohq.github.io/chinese-programmer-wrong-pronunciation/?audio=deque&type=1) /'dek/ | [🔊](https://shimohq.github.io/chinese-programmer-wrong-pronunciation/?audio=deque&type=2) /dɛk/ | ❌ /dɛk/ |
| Django | [🔊](https://shimohq.github.io/chinese-programmer-wrong-pronunciation/?audio=Django&type=1) /ˈdʒæŋɡoʊ/ | [🔊](https://shimohq.github.io/chinese-programmer-wrong-pronunciation/?audio=Django&type=2) /ˈdʒæŋɡoʊ/ | ❌ /ˈdʒæŋɡoʊ/ |
| doc | [🔊](https://shimohq.github.io/chinese-programmer-wrong-pronunciation/?audio=doc&type=1) /dɒk/ | [🔊](https://shimohq.github.io/chinese-programmer-wrong-pronunciation/?audio=doc&type=2) /dɒk/ | ❌ /dɒk/ |
| dotnet | [🔊](https://shimohq.github.io/chinese-programmer-wrong-pronunciation/?audio=dotnet&type=1) /dɒtnet/ | [🔊](https://shimohq.github.io/chinese-programmer-wrong-pronunciation/?audio=dotnet&type=2) /dɑːtnet/ | ❌ /dɑːtnet/ |
| edition | [🔊](https://shimohq.github.io/chinese-programmer-wrong-pronunciation/?audio=edition&type=1) /ɪˈdɪʃ(ə)n/ | [🔊](https://shimohq.github.io/chinese-programmer-wrong-pronunciation/?audio=edition&type=2) /ɪˈdɪʃn/ | ❌ /ɪˈdɪʃn/ |
| ephemeral | [🔊](https://shimohq.github.io/chinese-programmer-wrong-pronunciation/?audio=ephemeral&type=1) /ɪˈfemərəl/ | [🔊](https://shimohq.github.io/chinese-programmer-wrong-pronunciation/?audio=ephemeral&type=2) /ɪˈfemərəl/ | ❌ /ɪˈfemərəl/ |
| epoch | [🔊](https://shimohq.github.io/chinese-programmer-wrong-pronunciation/?audio=epoch&type=1) /ˈiːpɒk/ | [🔊](https://shimohq.github.io/chinese-programmer-wrong-pronunciation/?audio=epoch&type=2) /ˈepək/ | ❌ /ˈepək/ |
| event | [🔊](https://shimohq.github.io/chinese-programmer-wrong-pronunciation/?audio=event&type=1) /ɪ'vent/ | [🔊](https://shimohq.github.io/chinese-programmer-wrong-pronunciation/?audio=event&type=2) /ɪˈvent/ | ❌ /ɪˈvent/ |
| execute | [🔊](https://shimohq.github.io/chinese-programmer-wrong-pronunciation/?audio=execute&type=1) /ˈeksɪkjuːt/ | [🔊](https://shimohq.github.io/chinese-programmer-wrong-pronunciation/?audio=execute&type=2) /ˈeksɪkjuːt/ | - |
| executor | [🔊](https://shimohq.github.io/chinese-programmer-wrong-pronunciation/?audio=executor&type=1) /ɪɡˈzekjətə(r)/ | [🔊](https://shimohq.github.io/chinese-programmer-wrong-pronunciation/?audio=executor&type=2) /ɪɡˈzekjətər/ | - |
| exit | [🔊](https://shimohq.github.io/chinese-programmer-wrong-pronunciation/?audio=exit&type=1) /ˈeksɪt/ | [🔊](https://shimohq.github.io/chinese-programmer-wrong-pronunciation/?audio=exit&type=2) /ˈeksɪt/ | ❌ /ˈeksɪt/ |
| facade | [🔊](https://shimohq.github.io/chinese-programmer-wrong-pronunciation/?audio=facade&type=1) /fə'sɑːd/ | [🔊](https://shimohq.github.io/chinese-programmer-wrong-pronunciation/?audio=facade&type=2) /fəˈsɑːd/ | ❌ /fəˈsɑːd/ |
| fedora | [🔊](https://shimohq.github.io/chinese-programmer-wrong-pronunciation/?audio=fedora&type=1) /fɪ'dɔːrə/ | [🔊](https://shimohq.github.io/chinese-programmer-wrong-pronunciation/?audio=fedora&type=2) /fɪˈːrə/ | ❌ /fɪˈːrə/ |
| format | [🔊](https://shimohq.github.io/chinese-programmer-wrong-pronunciation/?audio=format&type=1) /'fɔːmæt/ | [🔊](https://shimohq.github.io/chinese-programmer-wrong-pronunciation/?audio=format&type=2) /ˈːrmæt/ | ❌ /ˈːrmæt/ |
| gauge | [🔊](https://shimohq.github.io/chinese-programmer-wrong-pronunciation/?audio=gauge&type=1) /ɡeɪdʒ/ | [🔊](https://shimohq.github.io/chinese-programmer-wrong-pronunciation/?audio=gauge&type=2) /ɡeɪdʒ/ | ❌ /ɡeɪdʒ/ |
| Git | [🔊](https://shimohq.github.io/chinese-programmer-wrong-pronunciation/?audio=Git&type=1) /ɡɪt/ | [🔊](https://shimohq.github.io/chinese-programmer-wrong-pronunciation/?audio=Git&type=2) /ɡɪt/ | ❌ /ɡɪt/ |
| GNU | [🔊](https://shimohq.github.io/chinese-programmer-wrong-pronunciation/?audio=GNU&type=1) /gnu:/ | [🔊](https://shimohq.github.io/chinese-programmer-wrong-pronunciation/?audio=GNU&type=2) /gnuː/ | - |
| Grafana | [🔊](https://shimohq.github.io/chinese-programmer-wrong-pronunciation/?audio=Grafana&type=1) /grəˈfɑːɑː/ | [🔊](https://shimohq.github.io/chinese-programmer-wrong-pronunciation/?audio=Grafana&type=2) /grəˈfɑːɑː/ | - |
| GraphQL | [🔊](https://shimohq.github.io/chinese-programmer-wrong-pronunciation/?audio=GraphQL&type=1) /græf kju ɛl/ | [🔊](https://shimohq.github.io/chinese-programmer-wrong-pronunciation/?audio=GraphQL&type=2) /græf kju ɛl/ | ❌ /græf kju ɛl/ |
| GUI | [🔊](https://shimohq.github.io/chinese-programmer-wrong-pronunciation/?audio=GUI&type=1) /ˈɡu:i/ | [🔊](https://shimohq.github.io/chinese-programmer-wrong-pronunciation/?audio=GUI&type=2) /ˈɡu:i/ | - |
| Haskell | [🔊](https://shimohq.github.io/chinese-programmer-wrong-pronunciation/?audio=Haskell&type=1) /ˈhæskəl/ | [🔊](https://shimohq.github.io/chinese-programmer-wrong-pronunciation/?audio=Haskell&type=2) /ˈhæskəl/ | ❌ /ˈhæskəl/ |
| height | [🔊](https://shimohq.github.io/chinese-programmer-wrong-pronunciation/?audio=height&type=1) /haɪt/ | [🔊](https://shimohq.github.io/chinese-programmer-wrong-pronunciation/?audio=height&type=2) /haɪt/ | ❌ /haɪt/ |
| hidden | [🔊](https://shimohq.github.io/chinese-programmer-wrong-pronunciation/?audio=hidden&type=1) /'hɪdn/ | [🔊](https://shimohq.github.io/chinese-programmer-wrong-pronunciation/?audio=hidden&type=2) /ˈhɪdn/ | ❌ /ˈhɪdn/ |
| image | [🔊](https://shimohq.github.io/chinese-programmer-wrong-pronunciation/?audio=image&type=1) /'ɪmɪdʒ/ | [🔊](https://shimohq.github.io/chinese-programmer-wrong-pronunciation/?audio=image&type=2) /ˈɪmɪdʒ/ | ❌ /ˈɪmɪdʒ/ |
| implement | [🔊](https://shimohq.github.io/chinese-programmer-wrong-pronunciation/?audio=implement&type=1) /'ɪmplɪm(ə)nt/ | [🔊](https://shimohq.github.io/chinese-programmer-wrong-pronunciation/?audio=implement&type=2) /ˈɪmplɪmənt/ | ❌ /ˈɪmplɪmənt/ |
| integer | [🔊](https://shimohq.github.io/chinese-programmer-wrong-pronunciation/?audio=integer&type=1) /'ɪntɪdʒə/ | [🔊](https://shimohq.github.io/chinese-programmer-wrong-pronunciation/?audio=integer&type=2) /ˈɪntɪdʒər/ | ❌ /ˈɪntɪdʒər/ |
| issue | [🔊](https://shimohq.github.io/chinese-programmer-wrong-pronunciation/?audio=issue&type=1) /'ɪʃuː/ | [🔊](https://shimohq.github.io/chinese-programmer-wrong-pronunciation/?audio=issue&type=2) /ˈɪʃuː/ | ❌ /ˈɪʃuː/ |
| Java | [🔊](https://shimohq.github.io/chinese-programmer-wrong-pronunciation/?audio=Java&type=1) /'dʒɑːvə/ | [🔊](https://shimohq.github.io/chinese-programmer-wrong-pronunciation/?audio=Java&type=2) /ˈɑːvə/ | - |
| jpg | [🔊](https://shimohq.github.io/chinese-programmer-wrong-pronunciation/?audio=jpg&type=1) /'dʒeɪpeɡ/ | [🔊](https://shimohq.github.io/chinese-programmer-wrong-pronunciation/?audio=jpg&type=2) /'dʒeɪpeɡ/ | ❌ /'dʒeɪpeɡ/ |
| key | [🔊](https://shimohq.github.io/chinese-programmer-wrong-pronunciation/?audio=key&type=1) /kiː/ | [🔊](https://shimohq.github.io/chinese-programmer-wrong-pronunciation/?audio=key&type=2) /kiː/ | ❌ /kiː/ |
| Kubernetes | [🔊](https://shimohq.github.io/chinese-programmer-wrong-pronunciation/?audio=Kubernetes&type=1) /kubз'netɪs/ | [🔊](https://shimohq.github.io/chinese-programmer-wrong-pronunciation/?audio=Kubernetes&type=2) /kuːbə˞'netiz/ | - |
| lambda | [🔊](https://shimohq.github.io/chinese-programmer-wrong-pronunciation/?audio=lambda&type=1) /ˈlæmdə/ | [🔊](https://shimohq.github.io/chinese-programmer-wrong-pronunciation/?audio=lambda&type=2) /ˈlæmdə/ | ❌ /ˈlæmdə/ |
| Ldap | [🔊](https://shimohq.github.io/chinese-programmer-wrong-pronunciation/?audio=Ldap&type=1) /el'dæp/ | [🔊](https://shimohq.github.io/chinese-programmer-wrong-pronunciation/?audio=Ldap&type=2) /el'dæp/ | ❌ /el'dæp/ |
| linear | [🔊](https://shimohq.github.io/chinese-programmer-wrong-pronunciation/?audio=linear&type=1) /'lɪnɪə/ | [🔊](https://shimohq.github.io/chinese-programmer-wrong-pronunciation/?audio=linear&type=2) /ˈlɪniər/ | ❌ /ˈlɪniər/ |
| LINQ | [🔊](https://shimohq.github.io/chinese-programmer-wrong-pronunciation/?audio=LINQ&type=1) /lɪŋk/ | [🔊](https://shimohq.github.io/chinese-programmer-wrong-pronunciation/?audio=LINQ&type=2) /lɪŋk/ | ❌ /lɪŋk/ |
| Linux | [🔊](https://shimohq.github.io/chinese-programmer-wrong-pronunciation/?audio=Linux&type=1) /'lɪnəks/ | [🔊](https://shimohq.github.io/chinese-programmer-wrong-pronunciation/?audio=Linux&type=2) /ˈlaɪnəks/ | ❌ /ˈlaɪnəks/ |
| locale | [🔊](https://shimohq.github.io/chinese-programmer-wrong-pronunciation/?audio=locale&type=1) /ləʊ'kɑːl/ | [🔊](https://shimohq.github.io/chinese-programmer-wrong-pronunciation/?audio=locale&type=2) /loʊˈkæl/ | ❌ /loʊˈkæl/ |
| Lucene | [🔊](https://shimohq.github.io/chinese-programmer-wrong-pronunciation/?audio=Lucene&type=1) /lu'siːn/ | [🔊](https://shimohq.github.io/chinese-programmer-wrong-pronunciation/?audio=Lucene&type=2) /lu'siːn/ | ❌ /lu'siːn/ |
| macro | [🔊](https://shimohq.github.io/chinese-programmer-wrong-pronunciation/?audio=macro&type=1) /ˈmækrəʊ/ | [🔊](https://shimohq.github.io/chinese-programmer-wrong-pronunciation/?audio=macro&type=2) /ˈmækroʊ/ | ❌ /ˈmækroʊ/ |
| main | [🔊](https://shimohq.github.io/chinese-programmer-wrong-pronunciation/?audio=main&type=1) /meɪn/ | [🔊](https://shimohq.github.io/chinese-programmer-wrong-pronunciation/?audio=main&type=2) /meɪn/ | ❌ /meɪn/ |
| margin | [🔊](https://shimohq.github.io/chinese-programmer-wrong-pronunciation/?audio=margin&type=1) /'mɑːɪn/ | [🔊](https://shimohq.github.io/chinese-programmer-wrong-pronunciation/?audio=margin&type=2) /ˈmɑːrdʒɪn/ | ❌ /ˈmɑːrdʒɪn/ |
| matrix | [🔊](https://shimohq.github.io/chinese-programmer-wrong-pronunciation/?audio=matrix&type=1) /ˈmeɪtrɪks/ | [🔊](https://shimohq.github.io/chinese-programmer-wrong-pronunciation/?audio=matrix&type=2) /ˈmeɪtrɪks/ | ❌ /ˈmeɪtrɪks/ |
| maven | [🔊](https://shimohq.github.io/chinese-programmer-wrong-pronunciation/?audio=maven&type=1) /'meɪvn/ | [🔊](https://shimohq.github.io/chinese-programmer-wrong-pronunciation/?audio=maven&type=2) /ˈmeɪvn/ | ❌ /ˈmeɪvn/ |
| max | [🔊](https://shimohq.github.io/chinese-programmer-wrong-pronunciation/?audio=max&type=1) /mæks/ | [🔊](https://shimohq.github.io/chinese-programmer-wrong-pronunciation/?audio=max&type=2) /mæks/ | ❌ /mæks/ |
| Microsoft | [🔊](https://shimohq.github.io/chinese-programmer-wrong-pronunciation/?audio=Microsoft&type=1) /'maikrəusɔft/ | [🔊](https://shimohq.github.io/chinese-programmer-wrong-pronunciation/?audio=Microsoft&type=2) /ˈmaɪkrəsɔːft/ | ❌ /ˈmaɪkrəsɔːft/ |
| miscellaneous | [🔊](https://shimohq.github.io/chinese-programmer-wrong-pronunciation/?audio=miscellaneous&type=1) /ˌmɪˈleɪniəs/ | [🔊](https://shimohq.github.io/chinese-programmer-wrong-pronunciation/?audio=miscellaneous&type=2) /ˌmɪˈleɪniəs/ | - |
| module | [🔊](https://shimohq.github.io/chinese-programmer-wrong-pronunciation/?audio=module&type=1) /'mɒdjuːl/ | [🔊](https://shimohq.github.io/chinese-programmer-wrong-pronunciation/?audio=module&type=2) /ˈmɑːdʒuːl/ | ❌ /ˈmɑːdʒuːl/ |
| native | [🔊](https://shimohq.github.io/chinese-programmer-wrong-pronunciation/?audio=native&type=1) /ˈneɪtɪv/ | [🔊](https://shimohq.github.io/chinese-programmer-wrong-pronunciation/?audio=native&type=2) /ˈneɪtɪv/ | ❌ /ˈneɪtɪv/ |
| null | [🔊](https://shimohq.github.io/chinese-programmer-wrong-pronunciation/?audio=null&type=1) /nʌl/ | [🔊](https://shimohq.github.io/chinese-programmer-wrong-pronunciation/?audio=null&type=2) /nʌl/ | ❌ /nʌl/ |
| obsolete | [🔊](https://shimohq.github.io/chinese-programmer-wrong-pronunciation/?audio=obsolete&type=1) /ˈɒbsəliːt/ | [🔊](https://shimohq.github.io/chinese-programmer-wrong-pronunciation/?audio=obsolete&type=2) /ˌɑːbsəˈliːt/ | - |
| parameter | [🔊](https://shimohq.github.io/chinese-programmer-wrong-pronunciation/?audio=parameter&type=1) /pə'ræmɪtə/ | [🔊](https://shimohq.github.io/chinese-programmer-wrong-pronunciation/?audio=parameter&type=2) /pəˈræmɪtər/ | ❌ /pəˈræmɪtər/ |
| phantom | [🔊](https://shimohq.github.io/chinese-programmer-wrong-pronunciation/?audio=phantom&type=1) /'fæntəm/ | [🔊](https://shimohq.github.io/chinese-programmer-wrong-pronunciation/?audio=phantom&type=2) /ˈfæntəm/ | ❌ /ˈfæntəm/ |
| privilege | [🔊](https://shimohq.github.io/chinese-programmer-wrong-pronunciation/?audio=privilege&type=1) /'prɪvəlɪdʒ/ | [🔊](https://shimohq.github.io/chinese-programmer-wrong-pronunciation/?audio=privilege&type=2) /ˈprɪvəlɪdʒ/ | ❌ /ˈprɪvəlɪdʒ/ |
| probe | [🔊](https://shimohq.github.io/chinese-programmer-wrong-pronunciation/?audio=probe&type=1) /prəʊb/ | [🔊](https://shimohq.github.io/chinese-programmer-wrong-pronunciation/?audio=probe&type=2) /proʊb/ | ❌ /proʊb/ |
| Prometheus | [🔊](https://shimohq.github.io/chinese-programmer-wrong-pronunciation/?audio=Prometheus&type=1) /prə-ˈmē-thē-əs/ | [🔊](https://shimohq.github.io/chinese-programmer-wrong-pronunciation/?audio=Prometheus&type=2) /pro'miθɪəs/ | - |
| putty | [🔊](https://shimohq.github.io/chinese-programmer-wrong-pronunciation/?audio=putty&type=1) /ˈpʌti/ | [🔊](https://shimohq.github.io/chinese-programmer-wrong-pronunciation/?audio=putty&type=2) /ˈpʌti/ | ❌ /ˈpʌti/ |
| Qt | [🔊](https://shimohq.github.io/chinese-programmer-wrong-pronunciation/?audio=Qt&type=1) /kjuːt/ | [🔊](https://shimohq.github.io/chinese-programmer-wrong-pronunciation/?audio=Qt&type=2) /kjuːt/ | - |
| query | [🔊](https://shimohq.github.io/chinese-programmer-wrong-pronunciation/?audio=query&type=1) /'kwɪəri/ | [🔊](https://shimohq.github.io/chinese-programmer-wrong-pronunciation/?audio=query&type=2) /ˈkwɪri/ | ❌ /ˈkwɪri/ |
| Realm | [🔊](https://shimohq.github.io/chinese-programmer-wrong-pronunciation/?audio=Realm&type=1) /relm/ | [🔊](https://shimohq.github.io/chinese-programmer-wrong-pronunciation/?audio=Realm&type=2) /relm/ | ❌ /relm/ |
| reconcile | [🔊](https://shimohq.github.io/chinese-programmer-wrong-pronunciation/?audio=reconcile&type=1) /ˈrekənsaɪl/ | [🔊](https://shimohq.github.io/chinese-programmer-wrong-pronunciation/?audio=reconcile&type=2) /ˈrekənsaɪl/ | - |
| Redux | [🔊](https://shimohq.github.io/chinese-programmer-wrong-pronunciation/?audio=Redux&type=1) /ri'dʌks/ | [🔊](https://shimohq.github.io/chinese-programmer-wrong-pronunciation/?audio=Redux&type=2) /ri'dʌks/ | ❌ /ri'dʌks/ |
| resolved | [🔊](https://shimohq.github.io/chinese-programmer-wrong-pronunciation/?audio=resolved&type=1) /rɪ'zɒlvd/ | [🔊](https://shimohq.github.io/chinese-programmer-wrong-pronunciation/?audio=resolved&type=2) /rɪˈzɑːlvd/ | ❌ /rɪˈzɑːlvd/ |
| resort | [🔊](https://shimohq.github.io/chinese-programmer-wrong-pronunciation/?audio=resort&type=1) /rɪˈzɔ:t/ | [🔊](https://shimohq.github.io/chinese-programmer-wrong-pronunciation/?audio=resort&type=2) /rɪˈːrt/ | ❌ /rɪˈːrt/ |
| resume | [🔊](https://shimohq.github.io/chinese-programmer-wrong-pronunciation/?audio=resume&type=1) /rɪ'zju:m/ | [🔊](https://shimohq.github.io/chinese-programmer-wrong-pronunciation/?audio=resume&type=2) /rɪˈzuːm/ | ❌ /rɪˈzuːm/ |
| retina | [🔊](https://shimohq.github.io/chinese-programmer-wrong-pronunciation/?audio=retina&type=1) /'retɪnə/ | [🔊](https://shimohq.github.io/chinese-programmer-wrong-pronunciation/?audio=retina&type=2) /ˈretɪnə/ | ❌ /ˈretɪnə/ |
| route | [🔊](https://shimohq.github.io/chinese-programmer-wrong-pronunciation/?audio=route&type=1) /ruːt/ | [🔊](https://shimohq.github.io/chinese-programmer-wrong-pronunciation/?audio=route&type=2) /ruːt/ | ❌ /ruːt/ |
| safari | [🔊](https://shimohq.github.io/chinese-programmer-wrong-pronunciation/?audio=safari&type=1) /sə'fɑːrɪ/ | [🔊](https://shimohq.github.io/chinese-programmer-wrong-pronunciation/?audio=safari&type=2) /səˈfɑːri/ | ❌ /səˈfɑːri/ |
| San Jose | [🔊](https://shimohq.github.io/chinese-programmer-wrong-pronunciation/?audio=San%20Jose&type=1) /sænhəu'zei/ | [🔊](https://shimohq.github.io/chinese-programmer-wrong-pronunciation/?audio=San%20Jose&type=2) /sænhəu'zei/ | ❌ /sænhəu'zei/ |
| scala | [🔊](https://shimohq.github.io/chinese-programmer-wrong-pronunciation/?audio=scala&type=1) /ˈskɑːlɑ/ | [🔊](https://shimohq.github.io/chinese-programmer-wrong-pronunciation/?audio=scala&type=2) /ˈskɑːlɑ/ | ❌ /ˈskɑːlɑ/ |
| scheme | [🔊](https://shimohq.github.io/chinese-programmer-wrong-pronunciation/?audio=scheme&type=1) /skiːm/ | [🔊](https://shimohq.github.io/chinese-programmer-wrong-pronunciation/?audio=scheme&type=2) /skiːm/ | ❌ /skiːm/ |
| segue | [🔊](https://shimohq.github.io/chinese-programmer-wrong-pronunciation/?audio=segue&type=1) /'sɛɡwe/ | [🔊](https://shimohq.github.io/chinese-programmer-wrong-pronunciation/?audio=segue&type=2) /ˈseɡweɪ/ | ❌ /ˈseɡweɪ/ |
| suite | [🔊](https://shimohq.github.io/chinese-programmer-wrong-pronunciation/?audio=suite&type=1) /swiːt/ | [🔊](https://shimohq.github.io/chinese-programmer-wrong-pronunciation/?audio=suite&type=2) /swiːt/ | ❌ /swiːt/ |
| telemetry | [🔊](https://shimohq.github.io/chinese-programmer-wrong-pronunciation/?audio=telemetry&type=1) /təˈlemətri/ | [🔊](https://shimohq.github.io/chinese-programmer-wrong-pronunciation/?audio=telemetry&type=2) /təˈlemətri/ | ❌ /təˈlemətri/ |
| thymeleaf | [🔊](https://shimohq.github.io/chinese-programmer-wrong-pronunciation/?audio=thymeleaf&type=1) /ˈtaɪmˌlɪːf/ | [🔊](https://shimohq.github.io/chinese-programmer-wrong-pronunciation/?audio=thymeleaf&type=2) /ˈtaɪmˌlɪːf/ | ❌ /ˈtaɪmˌlɪːf/ |
| tuple | [🔊](https://shimohq.github.io/chinese-programmer-wrong-pronunciation/?audio=tuple&type=1) /tjʊpəl/ | [🔊](https://shimohq.github.io/chinese-programmer-wrong-pronunciation/?audio=tuple&type=2) /tuːpəl/ | - |
| typical | [🔊](https://shimohq.github.io/chinese-programmer-wrong-pronunciation/?audio=typical&type=1) /'tɪpɪkl/ | [🔊](https://shimohq.github.io/chinese-programmer-wrong-pronunciation/?audio=typical&type=2) /ˈtɪpɪkl/ | ❌ /ˈtɪpɪkl/ |
| Ubuntu | [🔊](https://shimohq.github.io/chinese-programmer-wrong-pronunciation/?audio=Ubuntu&type=1) /ʊ'bʊntʊ/ | [🔊](https://shimohq.github.io/chinese-programmer-wrong-pronunciation/?audio=Ubuntu&type=2) /ʊ'bʊntʊ/ | ❌ /ʊ'bʊntʊ/ |
| Vagrant | [🔊](https://shimohq.github.io/chinese-programmer-wrong-pronunciation/?audio=Vagrant&type=1) /ˈveɪɡrənt/ | [🔊](https://shimohq.github.io/chinese-programmer-wrong-pronunciation/?audio=Vagrant&type=2) /ˈveɪɡrənt/ | ❌ /ˈveɪɡrənt/ |
| variable | [🔊](https://shimohq.github.io/chinese-programmer-wrong-pronunciation/?audio=variable&type=1) /'veəriəbl/ | [🔊](https://shimohq.github.io/chinese-programmer-wrong-pronunciation/?audio=variable&type=2) /ˈveriəbl/ | ❌ /ˈveriəbl/ |
| verbose | [🔊](https://shimohq.github.io/chinese-programmer-wrong-pronunciation/?audio=verbose&type=1) /vɜːˈbəʊs/ | [🔊](https://shimohq.github.io/chinese-programmer-wrong-pronunciation/?audio=verbose&type=2) /vɜːrˈboʊs/ | ❌ /vɜːrˈboʊs/ |
| Vite | [🔊](https://shimohq.github.io/chinese-programmer-wrong-pronunciation/?audio=Vite&type=1) /vit/ | [🔊](https://shimohq.github.io/chinese-programmer-wrong-pronunciation/?audio=Vite&type=2) /vit/ | ❌ /vit/ |
| vue | [🔊](https://shimohq.github.io/chinese-programmer-wrong-pronunciation/?audio=vue&type=1) /v'ju:/ | [🔊](https://shimohq.github.io/chinese-programmer-wrong-pronunciation/?audio=vue&type=2) /v'ju:/ | ❌ /v'ju:/ |
| width | [🔊](https://shimohq.github.io/chinese-programmer-wrong-pronunciation/?audio=width&type=1) /wɪdθ/ | [🔊](https://shimohq.github.io/chinese-programmer-wrong-pronunciation/?audio=width&type=2) /wɪdθ/ | ❌ /wɪdθ/ |
| YouTube | [🔊](https://shimohq.github.io/chinese-programmer-wrong-pronunciation/?audio=YouTube&type=1) /'juː'tjuːb/ | [🔊](https://shimohq.github.io/chinese-programmer-wrong-pronunciation/?audio=YouTube&type=2) /'juː'tjuːb/ | ❌ /'juː'tjuːb/ |
<!-- Table Generate End -->
* Kubernetes当使用简名 Kube 称呼 Kubernetes 时, 发音则与 cube(/kjuːb/) 一致
* 本着简单的原则, 又为了避免程序猿们出现选择困难症, '正确音标'采用了最接近有道词典音频的英式 DJ 音标, 不代表其唯一性
* 专业在线英语词典请参考: [在线英语词典哪个比较好?](https://www.zhihu.com/question/19707759)
## 相关链接
#### 工具
* 浏览器扩展:实时检索英语发音,安装 [chromium 扩展](https://github.com/shimohq/chinese-programmer-wrong-pronunciation/tree/master/tools/chromium_extension/README.md)或[外部独立库](https://github.com/jingjingxyk/chinese-programmer-wrong-pronunciation-chromium-extension.git)
* 排版更好看的网页:[https://shimohq.github.io/chinese-programmer-wrong-pronunciation/](https://shimohq.github.io/chinese-programmer-wrong-pronunciation/)thanks @antfu
* iOS应用[猿单词](https://apps.apple.com/cn/app/%E7%8C%BF%E5%8D%95%E8%AF%8D-%E4%B8%AD%E5%9B%BD%E7%A8%8B%E5%BA%8F%E5%91%98%E5%AE%B9%E6%98%93%E5%8F%91%E9%9F%B3%E9%94%99%E8%AF%AF%E7%9A%84%E5%8D%95%E8%AF%8D/id1626487291)
#### 拓展
* 真人发音: https://www.bilibili.com/video/bv1nv411i7z3 (by @hailintao)
* 简洁的单词列表,正确读音不用再打开新网页: https://cpwp.netlify.app/ (by @antfu7)
* 国际音标严式记音纽约音https://github.com/b1f6c1c4/programming-pronunciations-en_US (by @b1f6c1c4)
* 单词连读https://corrector.justsong.cn/ (by [@songquanpeng](https://github.com/songquanpeng/pronunciation-corrector))
* [iOS app](https://apps.apple.com/cn/app/%E7%8C%BF%E5%8D%95%E8%AF%8D-%E4%B8%AD%E5%9B%BD%E7%A8%8B%E5%BA%8F%E5%91%98%E5%AE%B9%E6%98%93%E5%8F%91%E9%9F%B3%E9%94%99%E8%AF%AF%E7%9A%84%E5%8D%95%E8%AF%8D/id1626487291) (by @Chang12)
* [chromium系浏览器扩展无页面跳转实时检索英语发音](https://github.com/jingjingxyk/chinese-programmer-wrong-pronunciation-chromium-extension.git) (by @jingjingxyk)
### 说明
1. 本着简单的原则, 又为了避免程序猿们出现选择困难症, '正确音标'采用了最接近有道词典音频的英式 DJ 音标, 不代表其唯一性
1. 专业在线英语词典请参考: [在线英语词典哪个比较好?](https://www.zhihu.com/question/19707759)
#### Inspired
### 参考资料
1. https://www.zhihu.com/question/19739907
2. https://www.v2ex.com/t/131094
3. https://www.v2ex.com/t/309350
@ -157,6 +150,28 @@
5. https://www.v2ex.com/t/246033
6. https://www.v2ex.com/t/342087
### Star History
## 开发说明
项目使用 github pages 托管单词列表的[静态页面](https://shimohq.github.io/chinese-programmer-wrong-pronunciation/)。单词列表数据见:[data.json](https://github.com/Lionad-Morotar/chinese-programmer-wrong-pronunciation/blob/gh-pages/scripts/data.json),每次编译后,会根据最新的单词列表数据重新生成静态页面。
#### 如何给项目新增功能?
1. 修改浏览器插件代码,请使用 master 分支
2. 修改静态页面代码,请使用 gh-pages 分支
3. 代码规范暂无PR welcome
4. 提交规范,参考 [Git Commit 日志风格指南](https://open.leancloud.cn/git-commit-message/)
#### 如何新增或修改单词?
1. 切换到 gh-pages 分支
2. 直接在 data.json 的末尾新增单词(不需要手动排序)
3. 提交修改如“git commit -am 'add: word newword'”
4. 使用 npm version patch 重新打包并递增版本号
#### TODO
见:[TODO.md](https://github.com/Lionad-Morotar/chinese-programmer-wrong-pronunciation/blob/gh-pages/.todo)
## Star History
[![Star History Chart](https://api.star-history.com/svg?repos=shimohq/chinese-programmer-wrong-pronunciation&type=Date)](https://star-history.com/#shimohq/chinese-programmer-wrong-pronunciation&Date)

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.2 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.2 KiB

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

@ -0,0 +1,14 @@
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8" />
<link rel="icon" href='./favicon.db74ab0b.ico' />
<title>Chinese Programmer Wrong Pronunciation</title>
<script type="module" crossorigin src='./index.56b88b86.js'></script>
<link rel="stylesheet" href='./index.5cc2e3f7.css'>
</head>
<body>
<div id="app"></div>
</body>
</html>

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.2 KiB

@ -0,0 +1,12 @@
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8" />
<link rel="icon" href="favicon.ico" />
<title>Chinese Programmer Wrong Pronunciation</title>
</head>
<body>
<div id="app"></div>
<script type="module" src="/src/main.js"></script>
</body>
</html>

@ -0,0 +1,40 @@
{
"name": "chinese-programmer-wrong-pronunciation",
"version": "1.0.0",
"description": "chinese programmer wrong pronunciation",
"main": "index.html",
"scripts": {
"dev": "vite",
"case-police": "npx case-police README.md scripts/data.json --fix",
"build": "node ./scripts/build.js",
"test": "http-server ./docs -c0",
"preversion": "npm run build"
},
"repository": {
"type": "git",
"url": "git+https://github.com/shimohq/chinese-programmer-wrong-pronunciation.git"
},
"keywords": [
"pronunciation",
"chinese",
"english-learning"
],
"author": "",
"license": "MIT",
"bugs": {
"url": "https://github.com/shimohq/chinese-programmer-wrong-pronunciation/issues"
},
"homepage": "https://github.com/shimohq/chinese-programmer-wrong-pronunciation",
"devDependencies": {
"@purge-icons/generated": "^0.8.1",
"@vitejs/plugin-vue": "^2.0.0",
"autoprefixer": "^10.4.0",
"postcss": "^8.4.5",
"postcss-nesting": "^10.1.2",
"tailwind-percentage-property": "github:Lionad-Morotar/tailwind-percentage-property",
"tailwindcss": "^3.0.5",
"vite": "^2.7.2",
"vue": "^3.2.25",
"vue-router": "4.0.12"
}
}

@ -0,0 +1,948 @@
lockfileVersion: 5.3
specifiers:
'@purge-icons/generated': ^0.8.1
'@vitejs/plugin-vue': ^2.0.0
autoprefixer: ^10.4.0
postcss: ^8.4.5
postcss-nesting: ^10.1.2
tailwind-percentage-property: github:Lionad-Morotar/tailwind-percentage-property
tailwindcss: ^3.0.5
vite: ^2.7.2
vue: ^3.2.25
vue-router: 4.0.12
devDependencies:
'@purge-icons/generated': 0.8.1
'@vitejs/plugin-vue': 2.3.3_vite@2.9.14+vue@3.2.37
autoprefixer: 10.4.7_postcss@8.4.14
postcss: 8.4.14
postcss-nesting: 10.1.10_postcss@8.4.14
tailwind-percentage-property: github.com/Lionad-Morotar/tailwind-percentage-property/f41f06fb8a9a24edf5dd52671f07f325f1e3d6f8
tailwindcss: 3.1.5
vite: 2.9.14
vue: 3.2.37
vue-router: 4.0.12_vue@3.2.37
packages:
/@babel/parser/7.18.8:
resolution: {integrity: sha512-RSKRfYX20dyH+elbJK2uqAkVyucL+xXzhqlMD5/ZXx+dAAwpyB7HsvnHe/ZUGOF+xLr5Wx9/JoXVTj6BQE2/oA==}
engines: {node: '>=6.0.0'}
hasBin: true
dev: true
/@csstools/selector-specificity/2.0.2_e73911252e8c76a7ba13ab9c39479e7d:
resolution: {integrity: sha512-IkpVW/ehM1hWKln4fCA3NzJU8KwD+kIOvPZA4cqxoJHtE21CCzjyp+Kxbu0i5I4tBNOlXPL9mjwnWlL0VEG4Fg==}
engines: {node: ^12 || ^14 || >=16}
peerDependencies:
postcss: ^8.2
postcss-selector-parser: ^6.0.10
dependencies:
postcss: 8.4.14
postcss-selector-parser: 6.0.10
dev: true
/@iconify/iconify/2.2.1:
resolution: {integrity: sha512-WJzw+3iicrF/tbjbxxRinSgy5FHdJoz/egTqwi3xCDkNRJPq482RX1iyaWrjNuY2vMNSPkQMuqHvZDXgA+WnwQ==}
dev: true
/@nodelib/fs.scandir/2.1.5:
resolution: {integrity: sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==}
engines: {node: '>= 8'}
dependencies:
'@nodelib/fs.stat': 2.0.5
run-parallel: 1.2.0
dev: true
/@nodelib/fs.stat/2.0.5:
resolution: {integrity: sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==}
engines: {node: '>= 8'}
dev: true
/@nodelib/fs.walk/1.2.8:
resolution: {integrity: sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==}
engines: {node: '>= 8'}
dependencies:
'@nodelib/fs.scandir': 2.1.5
fastq: 1.13.0
dev: true
/@purge-icons/generated/0.8.1:
resolution: {integrity: sha512-rIExGA33EGKEToqtc8WfpboaR7or1XRp+KV1Y5v/P0Rq7G5Me95DmP3ow/MpG7ql+XZ9xPzyS2naGRx5358+6Q==}
dependencies:
'@iconify/iconify': 2.2.1
dev: true
/@vitejs/plugin-vue/2.3.3_vite@2.9.14+vue@3.2.37:
resolution: {integrity: sha512-SmQLDyhz+6lGJhPELsBdzXGc+AcaT8stgkbiTFGpXPe8Tl1tJaBw1A6pxDqDuRsVkD8uscrkx3hA7QDOoKYtyw==}
engines: {node: '>=12.0.0'}
peerDependencies:
vite: ^2.5.10
vue: ^3.2.25
dependencies:
vite: 2.9.14
vue: 3.2.37
dev: true
/@vue/compiler-core/3.2.37:
resolution: {integrity: sha512-81KhEjo7YAOh0vQJoSmAD68wLfYqJvoiD4ulyedzF+OEk/bk6/hx3fTNVfuzugIIaTrOx4PGx6pAiBRe5e9Zmg==}
dependencies:
'@babel/parser': 7.18.8
'@vue/shared': 3.2.37
estree-walker: 2.0.2
source-map: 0.6.1
dev: true
/@vue/compiler-dom/3.2.37:
resolution: {integrity: sha512-yxJLH167fucHKxaqXpYk7x8z7mMEnXOw3G2q62FTkmsvNxu4FQSu5+3UMb+L7fjKa26DEzhrmCxAgFLLIzVfqQ==}
dependencies:
'@vue/compiler-core': 3.2.37
'@vue/shared': 3.2.37
dev: true
/@vue/compiler-sfc/3.2.37:
resolution: {integrity: sha512-+7i/2+9LYlpqDv+KTtWhOZH+pa8/HnX/905MdVmAcI/mPQOBwkHHIzrsEsucyOIZQYMkXUiTkmZq5am/NyXKkg==}
dependencies:
'@babel/parser': 7.18.8
'@vue/compiler-core': 3.2.37
'@vue/compiler-dom': 3.2.37
'@vue/compiler-ssr': 3.2.37
'@vue/reactivity-transform': 3.2.37
'@vue/shared': 3.2.37
estree-walker: 2.0.2
magic-string: 0.25.9
postcss: 8.4.14
source-map: 0.6.1
dev: true
/@vue/compiler-ssr/3.2.37:
resolution: {integrity: sha512-7mQJD7HdXxQjktmsWp/J67lThEIcxLemz1Vb5I6rYJHR5vI+lON3nPGOH3ubmbvYGt8xEUaAr1j7/tIFWiEOqw==}
dependencies:
'@vue/compiler-dom': 3.2.37
'@vue/shared': 3.2.37
dev: true
/@vue/devtools-api/6.2.0:
resolution: {integrity: sha512-pF1G4wky+hkifDiZSWn8xfuLOJI1ZXtuambpBEYaf7Xaf6zC/pM29rvAGpd3qaGXnr4BAXU1Pxz/VfvBGwexGA==}
dev: true
/@vue/reactivity-transform/3.2.37:
resolution: {integrity: sha512-IWopkKEb+8qpu/1eMKVeXrK0NLw9HicGviJzhJDEyfxTR9e1WtpnnbYkJWurX6WwoFP0sz10xQg8yL8lgskAZg==}
dependencies:
'@babel/parser': 7.18.8
'@vue/compiler-core': 3.2.37
'@vue/shared': 3.2.37
estree-walker: 2.0.2
magic-string: 0.25.9
dev: true
/@vue/reactivity/3.2.37:
resolution: {integrity: sha512-/7WRafBOshOc6m3F7plwzPeCu/RCVv9uMpOwa/5PiY1Zz+WLVRWiy0MYKwmg19KBdGtFWsmZ4cD+LOdVPcs52A==}
dependencies:
'@vue/shared': 3.2.37
dev: true
/@vue/runtime-core/3.2.37:
resolution: {integrity: sha512-JPcd9kFyEdXLl/i0ClS7lwgcs0QpUAWj+SKX2ZC3ANKi1U4DOtiEr6cRqFXsPwY5u1L9fAjkinIdB8Rz3FoYNQ==}
dependencies:
'@vue/reactivity': 3.2.37
'@vue/shared': 3.2.37
dev: true
/@vue/runtime-dom/3.2.37:
resolution: {integrity: sha512-HimKdh9BepShW6YozwRKAYjYQWg9mQn63RGEiSswMbW+ssIht1MILYlVGkAGGQbkhSh31PCdoUcfiu4apXJoPw==}
dependencies:
'@vue/runtime-core': 3.2.37
'@vue/shared': 3.2.37
csstype: 2.6.20
dev: true
/@vue/server-renderer/3.2.37_vue@3.2.37:
resolution: {integrity: sha512-kLITEJvaYgZQ2h47hIzPh2K3jG8c1zCVbp/o/bzQOyvzaKiCquKS7AaioPI28GNxIsE/zSx+EwWYsNxDCX95MA==}
peerDependencies:
vue: 3.2.37
dependencies:
'@vue/compiler-ssr': 3.2.37
'@vue/shared': 3.2.37
vue: 3.2.37
dev: true
/@vue/shared/3.2.37:
resolution: {integrity: sha512-4rSJemR2NQIo9Klm1vabqWjD8rs/ZaJSzMxkMNeJS6lHiUjjUeYFbooN19NgFjztubEKh3WlZUeOLVdbbUWHsw==}
dev: true
/acorn-node/1.8.2:
resolution: {integrity: sha512-8mt+fslDufLYntIoPAaIMUe/lrbrehIiwmR3t2k9LljIzoigEPF27eLk2hy8zSGzmR/ogr7zbRKINMo1u0yh5A==}
dependencies:
acorn: 7.4.1
acorn-walk: 7.2.0
xtend: 4.0.2
dev: true
/acorn-walk/7.2.0:
resolution: {integrity: sha512-OPdCF6GsMIP+Az+aWfAAOEt2/+iVDKE7oy6lJ098aoe59oAmK76qV6Gw60SbZ8jHuG2wH058GF4pLFbYamYrVA==}
engines: {node: '>=0.4.0'}
dev: true
/acorn/7.4.1:
resolution: {integrity: sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A==}
engines: {node: '>=0.4.0'}
hasBin: true
dev: true
/anymatch/3.1.2:
resolution: {integrity: sha512-P43ePfOAIupkguHUycrc4qJ9kz8ZiuOUijaETwX7THt0Y/GNK7v0aa8rY816xWjZ7rJdA5XdMcpVFTKMq+RvWg==}
engines: {node: '>= 8'}
dependencies:
normalize-path: 3.0.0
picomatch: 2.3.1
dev: true
/arg/5.0.2:
resolution: {integrity: sha512-PYjyFOLKQ9y57JvQ6QLo8dAgNqswh8M1RMJYdQduT6xbWSgK36P/Z/v+p888pM69jMMfS8Xd8F6I1kQ/I9HUGg==}
dev: true
/autoprefixer/10.4.7_postcss@8.4.14:
resolution: {integrity: sha512-ypHju4Y2Oav95SipEcCcI5J7CGPuvz8oat7sUtYj3ClK44bldfvtvcxK6IEK++7rqB7YchDGzweZIBG+SD0ZAA==}
engines: {node: ^10 || ^12 || >=14}
hasBin: true
peerDependencies:
postcss: ^8.1.0
dependencies:
browserslist: 4.21.1
caniuse-lite: 1.0.30001363
fraction.js: 4.2.0
normalize-range: 0.1.2
picocolors: 1.0.0
postcss: 8.4.14
postcss-value-parser: 4.2.0
dev: true
/binary-extensions/2.2.0:
resolution: {integrity: sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==}
engines: {node: '>=8'}
dev: true
/braces/3.0.2:
resolution: {integrity: sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==}
engines: {node: '>=8'}
dependencies:
fill-range: 7.0.1
dev: true
/browserslist/4.21.1:
resolution: {integrity: sha512-Nq8MFCSrnJXSc88yliwlzQe3qNe3VntIjhsArW9IJOEPSHNx23FalwApUVbzAWABLhYJJ7y8AynWI/XM8OdfjQ==}
engines: {node: ^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7}
hasBin: true
dependencies:
caniuse-lite: 1.0.30001363
electron-to-chromium: 1.4.185
node-releases: 2.0.6
update-browserslist-db: 1.0.4_browserslist@4.21.1
dev: true
/camelcase-css/2.0.1:
resolution: {integrity: sha512-QOSvevhslijgYwRx6Rv7zKdMF8lbRmx+uQGx2+vDc+KI/eBnsy9kit5aj23AgGu3pa4t9AgwbnXWqS+iOY+2aA==}
engines: {node: '>= 6'}
dev: true
/caniuse-lite/1.0.30001363:
resolution: {integrity: sha512-HpQhpzTGGPVMnCjIomjt+jvyUu8vNFo3TaDiZ/RcoTrlOq/5+tC8zHdsbgFB6MxmaY+jCpsH09aD80Bb4Ow3Sg==}
dev: true
/chokidar/3.5.3:
resolution: {integrity: sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw==}
engines: {node: '>= 8.10.0'}
dependencies:
anymatch: 3.1.2
braces: 3.0.2
glob-parent: 5.1.2
is-binary-path: 2.1.0
is-glob: 4.0.3
normalize-path: 3.0.0
readdirp: 3.6.0
optionalDependencies:
fsevents: 2.3.2
dev: true
/color-name/1.1.4:
resolution: {integrity: sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==}
dev: true
/cssesc/3.0.0:
resolution: {integrity: sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg==}
engines: {node: '>=4'}
hasBin: true
dev: true
/csstype/2.6.20:
resolution: {integrity: sha512-/WwNkdXfckNgw6S5R125rrW8ez139lBHWouiBvX8dfMFtcn6V81REDqnH7+CRpRipfYlyU1CmOnOxrmGcFOjeA==}
dev: true
/defined/1.0.0:
resolution: {integrity: sha512-Y2caI5+ZwS5c3RiNDJ6u53VhQHv+hHKwhkI1iHvceKUHw9Df6EK2zRLfjejRgMuCuxK7PfSWIMwWecceVvThjQ==}
dev: true
/detective/5.2.1:
resolution: {integrity: sha512-v9XE1zRnz1wRtgurGu0Bs8uHKFSTdteYZNbIPFVhUZ39L/S79ppMpdmVOZAnoz1jfEFodc48n6MX483Xo3t1yw==}
engines: {node: '>=0.8.0'}
hasBin: true
dependencies:
acorn-node: 1.8.2
defined: 1.0.0
minimist: 1.2.6
dev: true
/didyoumean/1.2.2:
resolution: {integrity: sha512-gxtyfqMg7GKyhQmb056K7M3xszy/myH8w+B4RT+QXBQsvAOdc3XymqDDPHx1BgPgsdAA5SIifona89YtRATDzw==}
dev: true
/dlv/1.1.3:
resolution: {integrity: sha512-+HlytyjlPKnIG8XuRG8WvmBP8xs8P71y+SKKS6ZXWoEgLuePxtDoUEiH7WkdePWrQ5JBpE6aoVqfZfJUQkjXwA==}
dev: true
/electron-to-chromium/1.4.185:
resolution: {integrity: sha512-9kV/isoOGpKkBt04yYNaSWIBn3187Q5VZRtoReq8oz5NY/A4XmU6cAoqgQlDp7kKJCZMRjWZ8nsQyxfpFHvfyw==}
dev: true
/esbuild-android-64/0.14.48:
resolution: {integrity: sha512-3aMjboap/kqwCUpGWIjsk20TtxVoKck8/4Tu19rubh7t5Ra0Yrpg30Mt1QXXlipOazrEceGeWurXKeFJgkPOUg==}
engines: {node: '>=12'}
cpu: [x64]
os: [android]
requiresBuild: true
dev: true
optional: true
/esbuild-android-arm64/0.14.48:
resolution: {integrity: sha512-vptI3K0wGALiDq+EvRuZotZrJqkYkN5282iAfcffjI5lmGG9G1ta/CIVauhY42MBXwEgDJkweiDcDMRLzBZC4g==}
engines: {node: '>=12'}
cpu: [arm64]
os: [android]
requiresBuild: true
dev: true
optional: true
/esbuild-darwin-64/0.14.48:
resolution: {integrity: sha512-gGQZa4+hab2Va/Zww94YbshLuWteyKGD3+EsVon8EWTWhnHFRm5N9NbALNbwi/7hQ/hM1Zm4FuHg+k6BLsl5UA==}
engines: {node: '>=12'}
cpu: [x64]
os: [darwin]
requiresBuild: true
dev: true
optional: true
/esbuild-darwin-arm64/0.14.48:
resolution: {integrity: sha512-bFjnNEXjhZT+IZ8RvRGNJthLWNHV5JkCtuOFOnjvo5pC0sk2/QVk0Qc06g2PV3J0TcU6kaPC3RN9yy9w2PSLEA==}
engines: {node: '>=12'}
cpu: [arm64]
os: [darwin]
requiresBuild: true
dev: true
optional: true
/esbuild-freebsd-64/0.14.48:
resolution: {integrity: sha512-1NOlwRxmOsnPcWOGTB10JKAkYSb2nue0oM1AfHWunW/mv3wERfJmnYlGzL3UAOIUXZqW8GeA2mv+QGwq7DToqA==}
engines: {node: '>=12'}
cpu: [x64]
os: [freebsd]
requiresBuild: true
dev: true
optional: true
/esbuild-freebsd-arm64/0.14.48:
resolution: {integrity: sha512-gXqKdO8wabVcYtluAbikDH2jhXp+Klq5oCD5qbVyUG6tFiGhrC9oczKq3vIrrtwcxDQqK6+HDYK8Zrd4bCA9Gw==}
engines: {node: '>=12'}
cpu: [arm64]
os: [freebsd]
requiresBuild: true
dev: true
optional: true
/esbuild-linux-32/0.14.48:
resolution: {integrity: sha512-ghGyDfS289z/LReZQUuuKq9KlTiTspxL8SITBFQFAFRA/IkIvDpnZnCAKTCjGXAmUqroMQfKJXMxyjJA69c/nQ==}
engines: {node: '>=12'}
cpu: [ia32]
os: [linux]
requiresBuild: true
dev: true
optional: true
/esbuild-linux-64/0.14.48:
resolution: {integrity: sha512-vni3p/gppLMVZLghI7oMqbOZdGmLbbKR23XFARKnszCIBpEMEDxOMNIKPmMItQrmH/iJrL1z8Jt2nynY0bE1ug==}
engines: {node: '>=12'}
cpu: [x64]
os: [linux]
requiresBuild: true
dev: true
optional: true
/esbuild-linux-arm/0.14.48:
resolution: {integrity: sha512-+VfSV7Akh1XUiDNXgqgY1cUP1i2vjI+BmlyXRfVz5AfV3jbpde8JTs5Q9sYgaoq5cWfuKfoZB/QkGOI+QcL1Tw==}
engines: {node: '>=12'}
cpu: [arm]
os: [linux]
requiresBuild: true
dev: true
optional: true
/esbuild-linux-arm64/0.14.48:
resolution: {integrity: sha512-3CFsOlpoxlKPRevEHq8aAntgYGYkE1N9yRYAcPyng/p4Wyx0tPR5SBYsxLKcgPB9mR8chHEhtWYz6EZ+H199Zw==}
engines: {node: '>=12'}
cpu: [arm64]
os: [linux]
requiresBuild: true
dev: true
optional: true
/esbuild-linux-mips64le/0.14.48:
resolution: {integrity: sha512-cs0uOiRlPp6ymknDnjajCgvDMSsLw5mST2UXh+ZIrXTj2Ifyf2aAP3Iw4DiqgnyYLV2O/v/yWBJx+WfmKEpNLA==}
engines: {node: '>=12'}
cpu: [mips64el]
os: [linux]
requiresBuild: true
dev: true
optional: true
/esbuild-linux-ppc64le/0.14.48:
resolution: {integrity: sha512-+2F0vJMkuI0Wie/wcSPDCqXvSFEELH7Jubxb7mpWrA/4NpT+/byjxDz0gG6R1WJoeDefcrMfpBx4GFNN1JQorQ==}
engines: {node: '>=12'}
cpu: [ppc64]
os: [linux]
requiresBuild: true
dev: true
optional: true
/esbuild-linux-riscv64/0.14.48:
resolution: {integrity: sha512-BmaK/GfEE+5F2/QDrIXteFGKnVHGxlnK9MjdVKMTfvtmudjY3k2t8NtlY4qemKSizc+QwyombGWTBDc76rxePA==}
engines: {node: '>=12'}
cpu: [riscv64]
os: [linux]
requiresBuild: true
dev: true
optional: true
/esbuild-linux-s390x/0.14.48:
resolution: {integrity: sha512-tndw/0B9jiCL+KWKo0TSMaUm5UWBLsfCKVdbfMlb3d5LeV9WbijZ8Ordia8SAYv38VSJWOEt6eDCdOx8LqkC4g==}
engines: {node: '>=12'}
cpu: [s390x]
os: [linux]
requiresBuild: true
dev: true
optional: true
/esbuild-netbsd-64/0.14.48:
resolution: {integrity: sha512-V9hgXfwf/T901Lr1wkOfoevtyNkrxmMcRHyticybBUHookznipMOHoF41Al68QBsqBxnITCEpjjd4yAos7z9Tw==}
engines: {node: '>=12'}
cpu: [x64]
os: [netbsd]
requiresBuild: true
dev: true
optional: true
/esbuild-openbsd-64/0.14.48:
resolution: {integrity: sha512-+IHf4JcbnnBl4T52egorXMatil/za0awqzg2Vy6FBgPcBpisDWT2sVz/tNdrK9kAqj+GZG/jZdrOkj7wsrNTKA==}
engines: {node: '>=12'}
cpu: [x64]
os: [openbsd]
requiresBuild: true
dev: true
optional: true
/esbuild-sunos-64/0.14.48:
resolution: {integrity: sha512-77m8bsr5wOpOWbGi9KSqDphcq6dFeJyun8TA+12JW/GAjyfTwVtOnN8DOt6DSPUfEV+ltVMNqtXUeTeMAxl5KA==}
engines: {node: '>=12'}
cpu: [x64]
os: [sunos]
requiresBuild: true
dev: true
optional: true
/esbuild-windows-32/0.14.48:
resolution: {integrity: sha512-EPgRuTPP8vK9maxpTGDe5lSoIBHGKO/AuxDncg5O3NkrPeLNdvvK8oywB0zGaAZXxYWfNNSHskvvDgmfVTguhg==}
engines: {node: '>=12'}
cpu: [ia32]
os: [win32]
requiresBuild: true
dev: true
optional: true
/esbuild-windows-64/0.14.48:
resolution: {integrity: sha512-YmpXjdT1q0b8ictSdGwH3M8VCoqPpK1/UArze3X199w6u8hUx3V8BhAi1WjbsfDYRBanVVtduAhh2sirImtAvA==}
engines: {node: '>=12'}
cpu: [x64]
os: [win32]
requiresBuild: true
dev: true
optional: true
/esbuild-windows-arm64/0.14.48:
resolution: {integrity: sha512-HHaOMCsCXp0rz5BT2crTka6MPWVno121NKApsGs/OIW5QC0ggC69YMGs1aJct9/9FSUF4A1xNE/cLvgB5svR4g==}
engines: {node: '>=12'}
cpu: [arm64]
os: [win32]
requiresBuild: true
dev: true
optional: true
/esbuild/0.14.48:
resolution: {integrity: sha512-w6N1Yn5MtqK2U1/WZTX9ZqUVb8IOLZkZ5AdHkT6x3cHDMVsYWC7WPdiLmx19w3i4Rwzy5LqsEMtVihG3e4rFzA==}
engines: {node: '>=12'}
hasBin: true
requiresBuild: true
optionalDependencies:
esbuild-android-64: 0.14.48
esbuild-android-arm64: 0.14.48
esbuild-darwin-64: 0.14.48
esbuild-darwin-arm64: 0.14.48
esbuild-freebsd-64: 0.14.48
esbuild-freebsd-arm64: 0.14.48
esbuild-linux-32: 0.14.48
esbuild-linux-64: 0.14.48
esbuild-linux-arm: 0.14.48
esbuild-linux-arm64: 0.14.48
esbuild-linux-mips64le: 0.14.48
esbuild-linux-ppc64le: 0.14.48
esbuild-linux-riscv64: 0.14.48
esbuild-linux-s390x: 0.14.48
esbuild-netbsd-64: 0.14.48
esbuild-openbsd-64: 0.14.48
esbuild-sunos-64: 0.14.48
esbuild-windows-32: 0.14.48
esbuild-windows-64: 0.14.48
esbuild-windows-arm64: 0.14.48
dev: true
/escalade/3.1.1:
resolution: {integrity: sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==}
engines: {node: '>=6'}
dev: true
/estree-walker/2.0.2:
resolution: {integrity: sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w==}
dev: true
/fast-glob/3.2.11:
resolution: {integrity: sha512-xrO3+1bxSo3ZVHAnqzyuewYT6aMFHRAd4Kcs92MAonjwQZLsK9d0SF1IyQ3k5PoirxTW0Oe/RqFgMQ6TcNE5Ew==}
engines: {node: '>=8.6.0'}
dependencies:
'@nodelib/fs.stat': 2.0.5
'@nodelib/fs.walk': 1.2.8
glob-parent: 5.1.2
merge2: 1.4.1
micromatch: 4.0.5
dev: true
/fastq/1.13.0:
resolution: {integrity: sha512-YpkpUnK8od0o1hmeSc7UUs/eB/vIPWJYjKck2QKIzAf71Vm1AAQ3EbuZB3g2JIy+pg+ERD0vqI79KyZiB2e2Nw==}
dependencies:
reusify: 1.0.4
dev: true
/fill-range/7.0.1:
resolution: {integrity: sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==}
engines: {node: '>=8'}
dependencies:
to-regex-range: 5.0.1
dev: true
/fraction.js/4.2.0:
resolution: {integrity: sha512-MhLuK+2gUcnZe8ZHlaaINnQLl0xRIGRfcGk2yl8xoQAfHrSsL3rYu6FCmBdkdbhc9EPlwyGHewaRsvwRMJtAlA==}
dev: true
/fsevents/2.3.2:
resolution: {integrity: sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==}
engines: {node: ^8.16.0 || ^10.6.0 || >=11.0.0}
os: [darwin]
requiresBuild: true
dev: true
optional: true
/function-bind/1.1.1:
resolution: {integrity: sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==}
dev: true
/glob-parent/5.1.2:
resolution: {integrity: sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==}
engines: {node: '>= 6'}
dependencies:
is-glob: 4.0.3
dev: true
/glob-parent/6.0.2:
resolution: {integrity: sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==}
engines: {node: '>=10.13.0'}
dependencies:
is-glob: 4.0.3
dev: true
/has/1.0.3:
resolution: {integrity: sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==}
engines: {node: '>= 0.4.0'}
dependencies:
function-bind: 1.1.1
dev: true
/is-binary-path/2.1.0:
resolution: {integrity: sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==}
engines: {node: '>=8'}
dependencies:
binary-extensions: 2.2.0
dev: true
/is-core-module/2.9.0:
resolution: {integrity: sha512-+5FPy5PnwmO3lvfMb0AsoPaBG+5KHUI0wYFXOtYPnVVVspTFUuMZNfNaNVRt3FZadstu2c8x23vykRW/NBoU6A==}
dependencies:
has: 1.0.3
dev: true
/is-extglob/2.1.1:
resolution: {integrity: sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==}
engines: {node: '>=0.10.0'}
dev: true
/is-glob/4.0.3:
resolution: {integrity: sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==}
engines: {node: '>=0.10.0'}
dependencies:
is-extglob: 2.1.1
dev: true
/is-number/7.0.0:
resolution: {integrity: sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==}
engines: {node: '>=0.12.0'}
dev: true
/lilconfig/2.0.5:
resolution: {integrity: sha512-xaYmXZtTHPAw5m+xLN8ab9C+3a8YmV3asNSPOATITbtwrfbwaLJj8h66H1WMIpALCkqsIzK3h7oQ+PdX+LQ9Eg==}
engines: {node: '>=10'}
dev: true
/magic-string/0.25.9:
resolution: {integrity: sha512-RmF0AsMzgt25qzqqLc1+MbHmhdx0ojF2Fvs4XnOqz2ZOBXzzkEwc/dJQZCYHAn7v1jbVOjAZfK8msRn4BxO4VQ==}
dependencies:
sourcemap-codec: 1.4.8
dev: true
/merge2/1.4.1:
resolution: {integrity: sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==}
engines: {node: '>= 8'}
dev: true
/micromatch/4.0.5:
resolution: {integrity: sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA==}
engines: {node: '>=8.6'}
dependencies:
braces: 3.0.2
picomatch: 2.3.1
dev: true
/minimist/1.2.6:
resolution: {integrity: sha512-Jsjnk4bw3YJqYzbdyBiNsPWHPfO++UGG749Cxs6peCu5Xg4nrena6OVxOYxrQTqww0Jmwt+Ref8rggumkTLz9Q==}
dev: true
/nanoid/3.3.4:
resolution: {integrity: sha512-MqBkQh/OHTS2egovRtLk45wEyNXwF+cokD+1YPf9u5VfJiRdAiRwB2froX5Co9Rh20xs4siNPm8naNotSD6RBw==}
engines: {node: ^10 || ^12 || ^13.7 || ^14 || >=15.0.1}
hasBin: true
dev: true
/node-releases/2.0.6:
resolution: {integrity: sha512-PiVXnNuFm5+iYkLBNeq5211hvO38y63T0i2KKh2KnUs3RpzJ+JtODFjkD8yjLwnDkTYF1eKXheUwdssR+NRZdg==}
dev: true
/normalize-path/3.0.0:
resolution: {integrity: sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==}
engines: {node: '>=0.10.0'}
dev: true
/normalize-range/0.1.2:
resolution: {integrity: sha512-bdok/XvKII3nUpklnV6P2hxtMNrCboOjAcyBuQnWEhO665FwrSNRxU+AqpsyvO6LgGYPspN+lu5CLtw4jPRKNA==}
engines: {node: '>=0.10.0'}
dev: true
/object-hash/3.0.0:
resolution: {integrity: sha512-RSn9F68PjH9HqtltsSnqYC1XXoWe9Bju5+213R98cNGttag9q9yAOTzdbsqvIa7aNm5WffBZFpWYr2aWrklWAw==}
engines: {node: '>= 6'}
dev: true
/path-parse/1.0.7:
resolution: {integrity: sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==}
dev: true
/picocolors/1.0.0:
resolution: {integrity: sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==}
dev: true
/picomatch/2.3.1:
resolution: {integrity: sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==}
engines: {node: '>=8.6'}
dev: true
/pify/2.3.0:
resolution: {integrity: sha512-udgsAY+fTnvv7kI7aaxbqwWNb0AHiB0qBO89PZKPkoTmGOgdbrHDKD+0B2X4uTfJ/FT1R09r9gTsjUjNJotuog==}
engines: {node: '>=0.10.0'}
dev: true
/postcss-import/14.1.0_postcss@8.4.14:
resolution: {integrity: sha512-flwI+Vgm4SElObFVPpTIT7SU7R3qk2L7PyduMcokiaVKuWv9d/U+Gm/QAd8NDLuykTWTkcrjOeD2Pp1rMeBTGw==}
engines: {node: '>=10.0.0'}
peerDependencies:
postcss: ^8.0.0
dependencies:
postcss: 8.4.14
postcss-value-parser: 4.2.0
read-cache: 1.0.0
resolve: 1.22.1
dev: true
/postcss-js/4.0.0_postcss@8.4.14:
resolution: {integrity: sha512-77QESFBwgX4irogGVPgQ5s07vLvFqWr228qZY+w6lW599cRlK/HmnlivnnVUxkjHnCu4J16PDMHcH+e+2HbvTQ==}
engines: {node: ^12 || ^14 || >= 16}
peerDependencies:
postcss: ^8.3.3
dependencies:
camelcase-css: 2.0.1
postcss: 8.4.14
dev: true
/postcss-load-config/4.0.1_postcss@8.4.14:
resolution: {integrity: sha512-vEJIc8RdiBRu3oRAI0ymerOn+7rPuMvRXslTvZUKZonDHFIczxztIyJ1urxM1x9JXEikvpWWTUUqal5j/8QgvA==}
engines: {node: '>= 14'}
peerDependencies:
postcss: '>=8.0.9'
ts-node: '>=9.0.0'
peerDependenciesMeta:
postcss:
optional: true
ts-node:
optional: true
dependencies:
lilconfig: 2.0.5
postcss: 8.4.14
yaml: 2.1.1
dev: true
/postcss-nested/5.0.6_postcss@8.4.14:
resolution: {integrity: sha512-rKqm2Fk0KbA8Vt3AdGN0FB9OBOMDVajMG6ZCf/GoHgdxUJ4sBFp0A/uMIRm+MJUdo33YXEtjqIz8u7DAp8B7DA==}
engines: {node: '>=12.0'}
peerDependencies:
postcss: ^8.2.14
dependencies:
postcss: 8.4.14
postcss-selector-parser: 6.0.10
dev: true
/postcss-nesting/10.1.10_postcss@8.4.14:
resolution: {integrity: sha512-lqd7LXCq0gWc0wKXtoKDru5wEUNjm3OryLVNRZ8OnW8km6fSNUuFrjEhU3nklxXE2jvd4qrox566acgh+xQt8w==}
engines: {node: ^12 || ^14 || >=16}
peerDependencies:
postcss: ^8.2
dependencies:
'@csstools/selector-specificity': 2.0.2_e73911252e8c76a7ba13ab9c39479e7d
postcss: 8.4.14
postcss-selector-parser: 6.0.10
dev: true
/postcss-selector-parser/6.0.10:
resolution: {integrity: sha512-IQ7TZdoaqbT+LCpShg46jnZVlhWD2w6iQYAcYXfHARZ7X1t/UGhhceQDs5X0cGqKvYlHNOuv7Oa1xmb0oQuA3w==}
engines: {node: '>=4'}
dependencies:
cssesc: 3.0.0
util-deprecate: 1.0.2
dev: true
/postcss-value-parser/4.2.0:
resolution: {integrity: sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ==}
dev: true
/postcss/8.4.14:
resolution: {integrity: sha512-E398TUmfAYFPBSdzgeieK2Y1+1cpdxJx8yXbK/m57nRhKSmk1GB2tO4lbLBtlkfPQTDKfe4Xqv1ASWPpayPEig==}
engines: {node: ^10 || ^12 || >=14}
dependencies:
nanoid: 3.3.4
picocolors: 1.0.0
source-map-js: 1.0.2
dev: true
/queue-microtask/1.2.3:
resolution: {integrity: sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==}
dev: true
/quick-lru/5.1.1:
resolution: {integrity: sha512-WuyALRjWPDGtt/wzJiadO5AXY+8hZ80hVpe6MyivgraREW751X3SbhRvG3eLKOYN+8VEvqLcf3wdnt44Z4S4SA==}
engines: {node: '>=10'}
dev: true
/read-cache/1.0.0:
resolution: {integrity: sha512-Owdv/Ft7IjOgm/i0xvNDZ1LrRANRfew4b2prF3OWMQLxLfu3bS8FVhCsrSCMK4lR56Y9ya+AThoTpDCTxCmpRA==}
dependencies:
pify: 2.3.0
dev: true
/readdirp/3.6.0:
resolution: {integrity: sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==}
engines: {node: '>=8.10.0'}
dependencies:
picomatch: 2.3.1
dev: true
/resolve/1.22.1:
resolution: {integrity: sha512-nBpuuYuY5jFsli/JIs1oldw6fOQCBioohqWZg/2hiaOybXOft4lonv85uDOKXdf8rhyK159cxU5cDcK/NKk8zw==}
hasBin: true
dependencies:
is-core-module: 2.9.0
path-parse: 1.0.7
supports-preserve-symlinks-flag: 1.0.0
dev: true
/reusify/1.0.4:
resolution: {integrity: sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==}
engines: {iojs: '>=1.0.0', node: '>=0.10.0'}
dev: true
/rollup/2.76.0:
resolution: {integrity: sha512-9jwRIEY1jOzKLj3nsY/yot41r19ITdQrhs+q3ggNWhr9TQgduHqANvPpS32RNpzGklJu3G1AJfvlZLi/6wFgWA==}
engines: {node: '>=10.0.0'}
hasBin: true
optionalDependencies:
fsevents: 2.3.2
dev: true
/run-parallel/1.2.0:
resolution: {integrity: sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==}
dependencies:
queue-microtask: 1.2.3
dev: true
/source-map-js/1.0.2:
resolution: {integrity: sha512-R0XvVJ9WusLiqTCEiGCmICCMplcCkIwwR11mOSD9CR5u+IXYdiseeEuXCVAjS54zqwkLcPNnmU4OeJ6tUrWhDw==}
engines: {node: '>=0.10.0'}
dev: true
/source-map/0.6.1:
resolution: {integrity: sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==}
engines: {node: '>=0.10.0'}
dev: true
/sourcemap-codec/1.4.8:
resolution: {integrity: sha512-9NykojV5Uih4lgo5So5dtw+f0JgJX30KCNI8gwhz2J9A15wD0Ml6tjHKwf6fTSa6fAdVBdZeNOs9eJ71qCk8vA==}
dev: true
/supports-preserve-symlinks-flag/1.0.0:
resolution: {integrity: sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==}
engines: {node: '>= 0.4'}
dev: true
/tailwindcss/3.1.5:
resolution: {integrity: sha512-bC/2dy3dGPqxMWAqFSRgQxVCfmO/31ZbeEp8s9DMDh4zgPZ5WW1gxRJkbBkXcTUIzaSUdhWrcsrSOe32ccgB4w==}
engines: {node: '>=12.13.0'}
hasBin: true
dependencies:
arg: 5.0.2
chokidar: 3.5.3
color-name: 1.1.4
detective: 5.2.1
didyoumean: 1.2.2
dlv: 1.1.3
fast-glob: 3.2.11
glob-parent: 6.0.2
is-glob: 4.0.3
lilconfig: 2.0.5
normalize-path: 3.0.0
object-hash: 3.0.0
picocolors: 1.0.0
postcss: 8.4.14
postcss-import: 14.1.0_postcss@8.4.14
postcss-js: 4.0.0_postcss@8.4.14
postcss-load-config: 4.0.1_postcss@8.4.14
postcss-nested: 5.0.6_postcss@8.4.14
postcss-selector-parser: 6.0.10
postcss-value-parser: 4.2.0
quick-lru: 5.1.1
resolve: 1.22.1
transitivePeerDependencies:
- ts-node
dev: true
/to-regex-range/5.0.1:
resolution: {integrity: sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==}
engines: {node: '>=8.0'}
dependencies:
is-number: 7.0.0
dev: true
/update-browserslist-db/1.0.4_browserslist@4.21.1:
resolution: {integrity: sha512-jnmO2BEGUjsMOe/Fg9u0oczOe/ppIDZPebzccl1yDWGLFP16Pa1/RM5wEoKYPG2zstNcDuAStejyxsOuKINdGA==}
hasBin: true
peerDependencies:
browserslist: '>= 4.21.0'
dependencies:
browserslist: 4.21.1
escalade: 3.1.1
picocolors: 1.0.0
dev: true
/util-deprecate/1.0.2:
resolution: {integrity: sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==}
dev: true
/vite/2.9.14:
resolution: {integrity: sha512-P/UCjSpSMcE54r4mPak55hWAZPlyfS369svib/gpmz8/01L822lMPOJ/RYW6tLCe1RPvMvOsJ17erf55bKp4Hw==}
engines: {node: '>=12.2.0'}
hasBin: true
peerDependencies:
less: '*'
sass: '*'
stylus: '*'
peerDependenciesMeta:
less:
optional: true
sass:
optional: true
stylus:
optional: true
dependencies:
esbuild: 0.14.48
postcss: 8.4.14
resolve: 1.22.1
rollup: 2.76.0
optionalDependencies:
fsevents: 2.3.2
dev: true
/vue-router/4.0.12_vue@3.2.37:
resolution: {integrity: sha512-CPXvfqe+mZLB1kBWssssTiWg4EQERyqJZes7USiqfW9B5N2x+nHlnsM1D3b5CaJ6qgCvMmYJnz+G0iWjNCvXrg==}
peerDependencies:
vue: ^3.0.0
dependencies:
'@vue/devtools-api': 6.2.0
vue: 3.2.37
dev: true
/vue/3.2.37:
resolution: {integrity: sha512-bOKEZxrm8Eh+fveCqS1/NkG/n6aMidsI6hahas7pa0w/l7jkbssJVsRhVDs07IdDq7h9KHswZOgItnwJAgtVtQ==}
dependencies:
'@vue/compiler-dom': 3.2.37
'@vue/compiler-sfc': 3.2.37
'@vue/runtime-dom': 3.2.37
'@vue/server-renderer': 3.2.37_vue@3.2.37
'@vue/shared': 3.2.37
dev: true
/xtend/4.0.2:
resolution: {integrity: sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==}
engines: {node: '>=0.4'}
dev: true
/yaml/2.1.1:
resolution: {integrity: sha512-o96x3OPo8GjWeSLF+wOAbrPfhFOGY0W00GNaxCDv+9hkcDJEnev1yh8S7pgHF0ik6zc8sQLuL8hjHjJULZp8bw==}
engines: {node: '>= 14'}
dev: true
github.com/Lionad-Morotar/tailwind-percentage-property/f41f06fb8a9a24edf5dd52671f07f325f1e3d6f8:
resolution: {commit: f41f06fb8a9a24edf5dd52671f07f325f1e3d6f8, repo: git+ssh://git@github.com/Lionad-Morotar/tailwind-percentage-property.git, type: git}
name: tailwind-percentage-property
version: 2.0.3
dev: true

@ -0,0 +1,9 @@
module.exports = {
plugins: [
// @see https://tailwindcss.com/docs/using-with-preprocessors#nesting
require('postcss-nesting'),
require('tailwindcss/nesting'),
require('tailwindcss'),
require('autoprefixer'),
],
}

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.2 KiB

@ -0,0 +1,82 @@
const fs = require('fs')
const path = require('path')
const execSync = require('child_process').execSync
const pkgJSON = require('../package.json')
const issueURL = pkgJSON.bugs.url
const words = require('./data.json')
const wordsPath = path.posix.join(__dirname, './data.json')
const readmePath = path.posix.join(__dirname, '../README.md')
async function policeCase () {
try {
execSync('npx case-police README.md scripts/data.json', { stdio: 'inherit' })
} catch (err) {
console.error('[Build Failed]', '请使用 npm run case-police 命令检查单词大小写并重新提交\n')
process.exit(-1)
}
}
function sortWords (words) {
return words.sort((a, b) => {
const aname = a.name.toLowerCase()
const bname = b.name.toLowerCase()
if (aname < bname) {
return -1
} else {
return 1
}
})
}
function genWordURL (word, type) {
const safeWord = encodeURIComponent(word)
const safeType = encodeURIComponent(type)
const gitPagesURL= 'https://shimohq.github.io/chinese-programmer-wrong-pronunciation/'
return `${gitPagesURL}?audio=${safeWord}&type=${safeType}`
}
async function genReadme (words) {
let tableContent = `| 单词 | 正确发音(英音)| 正确发音(美音)| 错误发音 |\n| --- | ----------- | ----------- | ---------- |`
words.map(word => {
tableContent += `\n| ${word.name} | [🔊](${genWordURL(word.name, 1)}) /${word.phonetic_uk}/ | [🔊](${genWordURL(word.name, 2)}) /${word.phonetic_us}/ | ${word.phonetic_wrong ? `❌ /${word.phonetic_us}/` : '-' } |`
})
const readmeContent = fs.readFileSync(readmePath, 'utf-8')
const writeFlagStart = `<!-- Table Generate Start -->`
const writeFlagEnd = `<!-- Table Generate End -->`
const writeContent = readmeContent.replace(new RegExp(`(${writeFlagStart})[^<]*(${writeFlagEnd})`), `$1\n${tableContent}\n$2`)
fs.writeFileSync(readmePath, writeContent)
}
async function genHTML () {
execSync('vite build', { stdio: 'inherit' })
const indexPath = path.join(__dirname, '../docs/index.html')
const indexContent = fs.readFileSync(indexPath, 'utf-8')
const writeContent = indexContent
.replace(/src="([^"]*)"/g, "src='.$1'")
.replace(/href="([^"]*)"/g, "href='.$1'")
fs.writeFileSync(indexPath, writeContent)
execSync('git add .', { stdio: 'inherit' })
execSync('git commit -am "chore: build"', { stdio: 'inherit' })
}
async function main () {
try {
await policeCase()
const sortedWords = sortWords(words)
await genReadme(sortedWords)
await fs.writeFileSync(wordsPath, JSON.stringify(sortedWords, null, 2))
await genHTML()
} catch (uncatchError) {
console.log(uncatchError)
console.log('[Build Failed]', 'issue welcome on', issueURL, '\n')
process.exit(-1)
}
console.log('[Build Done]')
}
main()

@ -0,0 +1,674 @@
[
{
"name": "access",
"phonetic_uk": "'ækses",
"phonetic_us": "ˈækses",
"phonetic_wrong": "ək'ses"
},
{
"name": "admin",
"phonetic_uk": "'ædmɪn",
"phonetic_us": "ˈædmɪn",
"phonetic_wrong": "ɜ:d'mɪn"
},
{
"name": "Adobe",
"phonetic_uk": "ə'dəʊbi",
"phonetic_us": "ə'dəʊbi",
"phonetic_wrong": ˈdub"
},
{
"name": "adversarial",
"phonetic_uk": "ˌædvəˈseəriəl",
"phonetic_us": "ˌædvərˈseriəl",
"phonetic_wrong": "ədˈːrsəriəl"
},
{
"name": "agile",
"phonetic_uk": "'ædʒaɪl",
"phonetic_us": "ˈædʒl",
"phonetic_wrong": "ə'dʒaɪl"
},
{
"name": "AJAX",
"phonetic_uk": "'eidʒæks",
"phonetic_us": "'eidʒæks",
"phonetic_wrong": "ə'dʒʌks"
},
{
"name": "alias",
"phonetic_uk": "ˈeɪliəs",
"phonetic_us": "ˈeɪliəs",
"phonetic_wrong": "ə'lais"
},
{
"name": "amazon",
"phonetic_uk": "'æməzən",
"phonetic_us": "ˈæməzɑːn",
"phonetic_wrong": "'əmeizən"
},
{
"name": "analogy",
"phonetic_uk": ˈnælədʒi",
"phonetic_us": ˈnælədʒi",
"phonetic_wrong": "ænə'lɒdʒi"
},
{
"name": "Angular",
"phonetic_uk": "'æŋgjʊlə",
"phonetic_us": "ˈæŋɡjələr",
"phonetic_wrong": "'æŋɡələ"
},
{
"name": "Apache",
"phonetic_uk": "ə'pætʃɪ",
"phonetic_us": ˈpætʃi",
"phonetic_wrong": "ʌpʌtʃ"
},
{
"name": "app",
"phonetic_uk": "æp",
"phonetic_us": "æp",
"phonetic_wrong": "eipi'pi"
},
{
"name": "archive",
"phonetic_uk": "'ɑːkaɪv",
"phonetic_us": "'ɑːkaɪv",
"phonetic_wrong": "'ətʃɪv"
},
{
"name": "array",
"phonetic_uk": "ə'rei",
"phonetic_us": ˈreɪ",
"phonetic_wrong": "æ'rei"
},
{
"name": "ASCII",
"phonetic_uk": "'æski",
"phonetic_us": "ˈæski",
"phonetic_wrong": "ɑːsk"
},
{
"name": "aspect",
"phonetic_uk": "'æspekt",
"phonetic_us": "ˈæspekt",
"phonetic_wrong": "ə'spekt"
},
{
"name": "async",
"phonetic_uk": ˈsɪŋk",
"phonetic_us": ˈsɪŋk",
"phonetic_wrong": "'æsɪŋk"
},
{
"name": "avatar",
"phonetic_uk": "'ævətɑː",
"phonetic_us": "ˈævətɑːr",
"phonetic_wrong": "ə'vʌtɑ"
},
{
"name": "Azure",
"phonetic_uk": "'æʒə",
"phonetic_us": "ˈæʒər",
"phonetic_wrong": "ˈæzʊʒə"
},
{
"name": "bind",
"phonetic_uk": "baɪnd",
"phonetic_us": "baɪnd",
"phonetic_wrong": "bɪnd"
},
{
"name": "cache",
"phonetic_uk": "kæʃ",
"phonetic_us": "kæʃ",
"phonetic_wrong": "kætʃ"
},
{
"name": "canal",
"phonetic_uk": "kəˈnæl",
"phonetic_us": "kəˈnæl",
"phonetic_wrong": "ˈkænl"
},
{
"name": "Chrome",
"phonetic_uk": "krəʊm",
"phonetic_us": "kroʊm",
"phonetic_wrong": "tʃɔːm"
},
{
"name": "clang",
"phonetic_uk": "klæŋ",
"phonetic_us": "klæŋ",
"phonetic_wrong": "sɪlæŋ"
},
{
"name": "daemon",
"phonetic_uk": "'diːmən",
"phonetic_us": "ˈdiːmən",
"phonetic_wrong": "dæmən"
},
{
"name": "debt",
"phonetic_uk": "det",
"phonetic_us": "det",
"phonetic_wrong": "de'bit"
},
{
"name": "deny",
"phonetic_uk": "dɪ'naɪ",
"phonetic_us": "dɪˈnaɪ",
"phonetic_wrong": "'dæni"
},
{
"name": "deprecate",
"phonetic_uk": "ˈdeprəkeɪt",
"phonetic_us": "ˈdeprəkeɪt",
"phonetic_wrong": ""
},
{
"name": "deque",
"phonetic_uk": "'dek",
"phonetic_us": "dɛk",
"phonetic_wrong": "di'kju"
},
{
"name": "Django",
"phonetic_uk": "ˈdʒæŋɡoʊ",
"phonetic_us": "ˈdʒæŋɡoʊ",
"phonetic_wrong": "diˈdʒæŋɡoʊ"
},
{
"name": "doc",
"phonetic_uk": "dɒk",
"phonetic_us": "dɒk",
"phonetic_wrong": "daʊk"
},
{
"name": "dotnet",
"phonetic_uk": "dɒtnet",
"phonetic_us": "dɑːtnet",
"phonetic_wrong": "daʊtnet"
},
{
"name": "edition",
"phonetic_uk": "ɪˈdɪʃ(ə)n",
"phonetic_us": "ɪˈdɪʃn",
"phonetic_wrong": "eˈdɪʃn"
},
{
"name": "ephemeral",
"phonetic_uk": "ɪˈfemərəl",
"phonetic_us": "ɪˈfemərəl",
"phonetic_wrong": "daʊtnet"
},
{
"name": "epoch",
"phonetic_uk": "ˈiːpɒk",
"phonetic_us": "ˈepək",
"phonetic_wrong": "'ɛpətʃ"
},
{
"name": "event",
"phonetic_uk": "ɪ'vent",
"phonetic_us": "ɪˈvent",
"phonetic_wrong": "'ɪvənt"
},
{
"name": "execute",
"phonetic_uk": "ˈeksɪkjuːt",
"phonetic_us": "ˈeksɪkjuːt",
"phonetic_wrong": ""
},
{
"name": "executor",
"phonetic_uk": "ɪɡˈzekjətə(r)",
"phonetic_us": "ɪɡˈzekjətər",
"phonetic_wrong": ""
},
{
"name": "exit",
"phonetic_uk": "ˈeksɪt",
"phonetic_us": "ˈeksɪt",
"phonetic_wrong": "ig'zit"
},
{
"name": "facade",
"phonetic_uk": "fə'sɑːd",
"phonetic_us": "fəˈsɑːd",
"phonetic_wrong": "'feikeid"
},
{
"name": "fedora",
"phonetic_uk": "fɪ'dɔːrə",
"phonetic_us": "fɪˈːrə",
"phonetic_wrong": "'fedərə"
},
{
"name": "format",
"phonetic_uk": "'fɔːmæt",
"phonetic_us": "ˈːrmæt",
"phonetic_wrong": "fɔ'mæt"
},
{
"name": "gauge",
"phonetic_uk": "ɡeɪdʒ",
"phonetic_us": "ɡeɪdʒ",
"phonetic_wrong": "ɡɑudʒ"
},
{
"name": "Git",
"phonetic_uk": "ɡɪt",
"phonetic_us": "ɡɪt",
"phonetic_wrong": "dʒɪt"
},
{
"name": "GNU",
"phonetic_uk": "gnu:",
"phonetic_us": "gnuː",
"phonetic_wrong": ""
},
{
"name": "Grafana",
"phonetic_uk": "grəˈfɑːɑː",
"phonetic_us": "grəˈfɑːɑː",
"phonetic_wrong": ""
},
{
"name": "GraphQL",
"phonetic_uk": "græf kju ɛl",
"phonetic_us": "græf kju ɛl",
"phonetic_wrong": "dʒɪgræf kju ɛl"
},
{
"name": "GUI",
"phonetic_uk": "ˈɡu:i",
"phonetic_us": "ˈɡu:i",
"phonetic_wrong": ""
},
{
"name": "Haskell",
"phonetic_uk": "ˈhæskəl",
"phonetic_us": "ˈhæskəl",
"phonetic_wrong": "hæˈskəl"
},
{
"name": "height",
"phonetic_uk": "haɪt",
"phonetic_us": "haɪt",
"phonetic_wrong": "heɪt"
},
{
"name": "hidden",
"phonetic_uk": "'hɪdn",
"phonetic_us": "ˈhɪdn",
"phonetic_wrong": "'haɪdn"
},
{
"name": "image",
"phonetic_uk": "'ɪmɪdʒ",
"phonetic_us": "ˈɪmɪdʒ",
"phonetic_wrong": "ɪ'meɪdʒ"
},
{
"name": "implement",
"phonetic_uk": "'ɪmplɪm(ə)nt",
"phonetic_us": "ˈɪmplɪmənt",
"phonetic_wrong": "ɪm'plem(ə)nt"
},
{
"name": "integer",
"phonetic_uk": "'ɪntɪdʒə",
"phonetic_us": "ˈɪntɪdʒər",
"phonetic_wrong": "ˈɪntaɪgə"
},
{
"name": "issue",
"phonetic_uk": "'ɪʃuː",
"phonetic_us": "ˈɪʃuː",
"phonetic_wrong": "ˈaɪʃuː"
},
{
"name": "Java",
"phonetic_uk": "'dʒɑːvə",
"phonetic_us": "ˈɑːvə",
"phonetic_wrong": ""
},
{
"name": "jpg",
"phonetic_uk": "'dʒeɪpeɡ",
"phonetic_us": "'dʒeɪpeɡ",
"phonetic_wrong": "ˈdʒeɪˈpi:ˈdʒiː"
},
{
"name": "key",
"phonetic_uk": "kiː",
"phonetic_us": "kiː",
"phonetic_wrong": "kei"
},
{
"name": "Kubernetes",
"phonetic_uk": "kubз'netɪs",
"phonetic_us": "kuːbə˞'netiz",
"phonetic_wrong": ""
},
{
"name": "lambda",
"phonetic_uk": "ˈlæmdə",
"phonetic_us": "ˈlæmdə",
"phonetic_wrong": "ˈlɒŋmdɑ"
},
{
"name": "Ldap",
"phonetic_uk": "el'dæp",
"phonetic_us": "el'dæp",
"phonetic_wrong": "el'daːp"
},
{
"name": "linear",
"phonetic_uk": "'lɪnɪə",
"phonetic_us": "ˈlɪniər",
"phonetic_wrong": "'laɪə"
},
{
"name": "LINQ",
"phonetic_uk": "lɪŋk",
"phonetic_us": "lɪŋk",
"phonetic_wrong": "lɪŋkju:"
},
{
"name": "Linux",
"phonetic_uk": "'lɪnəks",
"phonetic_us": "ˈlaɪnəks",
"phonetic_wrong": "ˈlɪnʌks"
},
{
"name": "locale",
"phonetic_uk": "ləʊ'kɑːl",
"phonetic_us": "loʊˈkæl",
"phonetic_wrong": "ˈloʊk(ə)l"
},
{
"name": "Lucene",
"phonetic_uk": "lu'siːn",
"phonetic_us": "lu'siːn",
"phonetic_wrong": "'lu:sən"
},
{
"name": "macro",
"phonetic_uk": "ˈmækrəʊ",
"phonetic_us": "ˈmækroʊ",
"phonetic_wrong": "ˈmakroʊ"
},
{
"name": "main",
"phonetic_uk": "meɪn",
"phonetic_us": "meɪn",
"phonetic_wrong": "mɪn"
},
{
"name": "margin",
"phonetic_uk": "'mɑːɪn",
"phonetic_us": "ˈmɑːrdʒɪn",
"phonetic_wrong": "'mʌgɪn"
},
{
"name": "matrix",
"phonetic_uk": "ˈmeɪtrɪks",
"phonetic_us": "ˈmeɪtrɪks",
"phonetic_wrong": "ˈmɑ:trɪks"
},
{
"name": "maven",
"phonetic_uk": "'meɪvn",
"phonetic_us": "ˈmeɪvn",
"phonetic_wrong": "'maːvn"
},
{
"name": "max",
"phonetic_uk": "mæks",
"phonetic_us": "mæks",
"phonetic_wrong": "mɑ:ks"
},
{
"name": "Microsoft",
"phonetic_uk": "'maikrəusɔft",
"phonetic_us": "ˈmaɪkrəsɔːft",
"phonetic_wrong": "'mikrəusɔft"
},
{
"name": "miscellaneous",
"phonetic_uk": "ˌmɪˈleɪniəs",
"phonetic_us": "ˌmɪˈleɪniəs",
"phonetic_wrong": ""
},
{
"name": "module",
"phonetic_uk": "'mɒdjuːl",
"phonetic_us": "ˈmɑːdʒuːl",
"phonetic_wrong": "'məʊdl"
},
{
"name": "native",
"phonetic_uk": "ˈneɪtɪv",
"phonetic_us": "ˈneɪtɪv",
"phonetic_wrong": "ˈnætɪv"
},
{
"name": "null",
"phonetic_uk": "nʌl",
"phonetic_us": "nʌl",
"phonetic_wrong": "naʊ"
},
{
"name": "obsolete",
"phonetic_uk": "ˈɒbsəliːt",
"phonetic_us": ɑːbsəˈliːt",
"phonetic_wrong": ""
},
{
"name": "parameter",
"phonetic_uk": "pə'ræmɪtə",
"phonetic_us": "pəˈræmɪtər",
"phonetic_wrong": "'pærəmɪtə"
},
{
"name": "phantom",
"phonetic_uk": "'fæntəm",
"phonetic_us": "ˈfæntəm",
"phonetic_wrong": "'pæntəm"
},
{
"name": "privilege",
"phonetic_uk": "'prɪvəlɪdʒ",
"phonetic_us": "ˈprɪvəlɪdʒ",
"phonetic_wrong": "'prɪvɪlɪdʒ"
},
{
"name": "probe",
"phonetic_uk": "prəʊb",
"phonetic_us": "proʊb",
"phonetic_wrong": "proʊbi"
},
{
"name": "Prometheus",
"phonetic_uk": "prə-ˈmē-thē-əs",
"phonetic_us": "pro'miθɪəs",
"phonetic_wrong": ""
},
{
"name": "putty",
"phonetic_uk": "ˈpʌti",
"phonetic_us": "ˈpʌti",
"phonetic_wrong": "ˈpuːti"
},
{
"name": "Qt",
"phonetic_uk": "kjuːt",
"phonetic_us": "kjuːt",
"phonetic_wrong": ""
},
{
"name": "query",
"phonetic_uk": "'kwɪəri",
"phonetic_us": "ˈkwɪri",
"phonetic_wrong": "'kwaɪri"
},
{
"name": "Realm",
"phonetic_uk": "relm",
"phonetic_us": "relm",
"phonetic_wrong": "riəlm"
},
{
"name": "reconcile",
"phonetic_uk": "ˈrekənsaɪl",
"phonetic_us": "ˈrekənsaɪl",
"phonetic_wrong": ""
},
{
"name": "Redux",
"phonetic_uk": "ri'dʌks",
"phonetic_us": "ri'dʌks",
"phonetic_wrong": "'ridju:ks"
},
{
"name": "resolved",
"phonetic_uk": "rɪ'zɒlvd",
"phonetic_us": "rɪˈzɑːlvd",
"phonetic_wrong": "rɪ'səʊvd"
},
{
"name": "resort",
"phonetic_uk": "rɪˈzɔ:t",
"phonetic_us": "rɪˈːrt",
"phonetic_wrong": "rɪˈsɔ:t"
},
{
"name": "resume",
"phonetic_uk": "rɪ'zju:m",
"phonetic_us": "rɪˈzuːm",
"phonetic_wrong": "rɪ'sju:m"
},
{
"name": "retina",
"phonetic_uk": "'retɪnə",
"phonetic_us": "ˈretɪnə",
"phonetic_wrong": "ri'tina"
},
{
"name": "route",
"phonetic_uk": "ruːt",
"phonetic_us": "ruːt",
"phonetic_wrong": "rəʊt"
},
{
"name": "safari",
"phonetic_uk": "sə'fɑːrɪ",
"phonetic_us": "səˈfɑːri",
"phonetic_wrong": "sæfərɪ"
},
{
"name": "San Jose",
"phonetic_uk": "sænhəu'zei",
"phonetic_us": "sænhəu'zei",
"phonetic_wrong": "sæn'ju:s"
},
{
"name": "scala",
"phonetic_uk": "ˈskɑːlɑ",
"phonetic_us": "ˈskɑːlɑ",
"phonetic_wrong": "ˈskæːlɑ"
},
{
"name": "scheme",
"phonetic_uk": "skiːm",
"phonetic_us": "skiːm",
"phonetic_wrong": "s'kæmə"
},
{
"name": "segue",
"phonetic_uk": "'sɛɡwe",
"phonetic_us": "ˈseɡweɪ",
"phonetic_wrong": "se'dʒ"
},
{
"name": "suite",
"phonetic_uk": "swiːt",
"phonetic_us": "swiːt",
"phonetic_wrong": "sjuːt"
},
{
"name": "telemetry",
"phonetic_uk": "təˈlemətri",
"phonetic_us": "təˈlemətri",
"phonetic_wrong": "ˈtelɪmətri"
},
{
"name": "thymeleaf",
"phonetic_uk": "ˈtaɪmˌlɪːf",
"phonetic_us": "ˈtaɪmˌlɪːf",
"phonetic_wrong": "θiːmɪlɪːf"
},
{
"name": "tuple",
"phonetic_uk": "tjʊpəl",
"phonetic_us": "tuːpəl",
"phonetic_wrong": ""
},
{
"name": "typical",
"phonetic_uk": "'tɪpɪkl",
"phonetic_us": "ˈtɪpɪkl",
"phonetic_wrong": "'taɪpɪkəl"
},
{
"name": "Ubuntu",
"phonetic_uk": "ʊ'bʊntʊ",
"phonetic_us": "ʊ'bʊntʊ",
"phonetic_wrong": "juː'bʊntʊ"
},
{
"name": "Vagrant",
"phonetic_uk": "ˈveɪɡrənt",
"phonetic_us": "ˈveɪɡrənt",
"phonetic_wrong": "ˈvagɹent"
},
{
"name": "variable",
"phonetic_uk": "'veəriəbl",
"phonetic_us": "ˈveriəbl",
"phonetic_wrong": "və'raiəbl"
},
{
"name": "verbose",
"phonetic_uk": "vɜːˈbəʊs",
"phonetic_us": "vɜːrˈboʊs",
"phonetic_wrong": "'vɜːrboʊs"
},
{
"name": "Vite",
"phonetic_uk": "vit",
"phonetic_us": "vit",
"phonetic_wrong": "vaɪt"
},
{
"name": "vue",
"phonetic_uk": "v'ju:",
"phonetic_us": "v'ju:",
"phonetic_wrong": "v'ju:i"
},
{
"name": "width",
"phonetic_uk": "wɪdθ",
"phonetic_us": "wɪdθ",
"phonetic_wrong": "waɪdθ"
},
{
"name": "YouTube",
"phonetic_uk": "'juː'tjuːb",
"phonetic_us": "'juː'tjuːb",
"phonetic_wrong": "'juː'tʊbɪ"
}
]

@ -0,0 +1,163 @@
<template>
<div class="px-2 py-8 text-center text-gray-700 dark:text-gray-200">
<div class="flex">
<h1 class="title mb-2 text-left m-auto font-thin" v-html="title" />
</div>
<Header />
<div>
<div class="flex">
<table class="m-auto text-left">
<thead>
<tr>
<th />
<th class="text-center">
UK
</th>
<th class="text-center">
US
</th>
<th class="text-center hidden lg:block">
Wrong
</th>
</tr>
</thead>
<tbody>
<tr v-for="word in words" :class="calcWordClassname(word.name)" :key="word.name">
<td class="px-2 py-1.5 rounded text-right pr-4 hover:bg-gray-400 hover:bg-opacity-10 cursor-pointer"
@click="google(word)">
{{ word.name }}
</td>
<td class="px-2 py-1.5 text-sm rounded text-center opacity-75 hover:bg-gray-500 hover:bg-opacity-10 cursor-pointer"
@click="play(word, 1)">
/{{ word.phonetic_uk }}/
</td>
<td class="px-2 py-1.5 text-sm rounded text-center opacity-75 hover:bg-gray-500 hover:bg-opacity-10 cursor-pointer"
@click="play(word, 2)">
/{{ word.phonetic_us }}/
</td>
<td
class="px-2 py-1.5 text-sm rounded text-center text-red-600 dark:text-red-400 opacity-50 hidden lg:block">
{{ word.phonetic_wrong ? `/${word.phonetic_wrong}/` : '-' }}
</td>
</tr>
</tbody>
</table>
</div>
</div>
<Footer />
<div
class="modal fixed flex top-0 bottom-0 right-0 left-0 bg-white pointer-events-none transition-opacity duration-200 ease-in"
:class="isModalOpen ? 'opacity-100' : 'opacity-0'">
<div class="m-auto">
<div class="text-5xl mb-1">
{{ wordDisplay }}
</div>
<div class="text-normal opacity-50">
{{ region.toUpperCase() }} [{{ phonetic }}]
</div>
</div>
</div>
</div>
</template>
<script setup>
import { ref, onMounted } from 'vue'
import raw from '../scripts/data.json'
import Header from './components/Header.vue'
import Footer from './components/Footer.vue'
/* Variables define */
const words = ref(raw)
const wordDisplay = ref('')
const phonetic = ref('')
const region = ref('us')
const isModalOpen = ref(false)
const title = Array.from('Chinese Programmer Wrong Pronunciation').map(i => i === ' ' ? '<br>' : `<span>${i}</span>`).join('')
/* Events define */
const play = (word, type) => {
const audio = new Audio(makeURL(word.name, type))
const typeName = { 1: 'uk', 2: 'us' }[type]
audio.addEventListener('playing', () => {
wordDisplay.value = word.name
region.value = typeName
phonetic.value = word[`phonetic_${typeName}`]
isModalOpen.value = true
setTimeout(() => {
isModalOpen.value = false
}, 1000)
})
audio.play()
}
const google = word => {
window.open(`https://www.google.com/search?q=how+to+pronounce+${word.name.replace(/\s/g, '+')}`, '_blank')
}
function makeURL (word, type) {
const voiceHost = "https://dict.youdao.com/dictvoice"
return `${voiceHost}?audio=${word}&type=${type}`
}
function calcWordClassname (word) {
return 'word-' + word.toLowerCase().replace(/\s+/g, '-')
}
/* Query Listener */
onMounted(() => {
setTimeout(() => {
if (window.location.search) {
/**
* window.location.href
* @example "http://localhost:3333/?audio=access&type=1"
*/
const search = window.location.search.split('?')
const queryStr = search ? search[1] : ''
const queries = queryStr.split('&')
const query = queries.reduce((h, c) => {
const [k, v] = c.split('=')
h[k] = decodeURIComponent(v)
return h
}, {})
const cname = '.' + calcWordClassname(query.audio).toLowerCase().replace(/\s+/g, '-') + ` > td:nth-child(${+query.type + 1})`
const $word = document.querySelector(cname)
if ($word) {
$word.scrollIntoViewIfNeeded()
setTimeout(() => {
$word.classList.add('animate-blink')
}, 500)
}
}
}, 500)
})
</script>
<style>
.title span {
opacity: 0.4;
cursor: default;
transition: 0.4s opacity ease;
}
.title span:hover {
opacity: 1;
}
.animate-blink {
animation: 1.5s ease-in 0s 1 alternate blink;
}
@keyframes blink {
from {
background-color: rgba(122,122,122,1);
}
to {
background-color: rgba(0,0,0,0);
}
}
</style>

@ -0,0 +1,8 @@
<template>
<div class="text-xs mt-24 text-gray-400">
<span>Thanks <a href="https://github.com/antfu/cpwp">antfu/CPWP</a> !</span>
</div>
</template>
<script setup>
</script>

@ -0,0 +1,23 @@
<template>
<div class="text-xl mb-12">
<div class="icon-btn mx-2 disabled" disabled title="PR welcome!">
<Icon icon='ri:sun-line' class="inline-block" />
</div>
<a class="icon-btn mx-2" :href="wordsList" target="_blank">
<Icon icon="ri:play-list-add-fill" class="inline-block" />
</a>
<a class="icon-btn mx-2" :href="homepage" target="_blank">
<Icon icon="ri:github-fill" class="inline-block" />
</a>
</div>
</template>
<script setup>
import pkgJSON from '../../package.json'
import Icon from './Icon.vue'
const homepage = pkgJSON.homepage
const wordsList = homepage + '#单词表'
</script>

@ -0,0 +1,45 @@
<template>
<div ref="el" :class="$attrs.class" style="vertical-align: text-bottom" />
</template>
<script setup="props">
import { watch, ref, onMounted, nextTick, defineProps } from "vue"
import Iconify from "@purge-icons/generated"
const props = defineProps({
icon: String
})
const el = ref(null)
const update = async () => {
if (el.value) {
await nextTick()
const svg = Iconify.renderSVG(props.icon, {})
if (svg) {
el.value.textContent = ""
el.value.appendChild(svg)
} else {
const span = document.createElement("span")
span.className = "iconify"
span.dataset.icon = props.icon
el.value.textContent = ""
el.value.appendChild(span)
}
}
}
watch(() => props.icon, update, { flush: "post" })
onMounted(update)
</script>
<style>
span.iconify {
background: #5551;
border-radius: 100%;
min-width: 1em;
min-height: 1em;
display: block;
}
</style>

@ -0,0 +1,9 @@
import './main.postcss'
import '@purge-icons/generated'
import { createApp } from 'vue'
import App from './App.vue'
/** Mount Vue */
createApp(App).mount('#app')

@ -0,0 +1,37 @@
@import 'tailwindcss/base';
@import 'tailwindcss/components';
@import 'tailwindcss/utilities';
/**
* Font Noto Serif
* @fixme 有些音标的字形在下载的 Noto-Serif 和谷歌字体 Noto-Serif 页面中是缺失的,
* 但它在谷歌字体的搜索页面中音标能正常显示,
* 已经在谷歌字体页面中提交了反馈,不知道会不会有回复
* @see https://fonts.google.com/noto/specimen/Noto+Serif
*/
@import url('https://fonts.googleapis.com/css2?family=Noto+Serif&display=swap');
body {
overflow: hidden scroll;
}
html, body, #app {
height: 100vh;
width: 100vw;
margin: 0;
padding: 0;
font-family: 'Noto Serif', serif;
scroll-behavior: smooth;
scroll-padding-top: 40px;
}
.schema-dark, .schema-dark .modal {
background: #222;
}
.icon-btn {
@apply opacity-50 transition duration-200 ease-in-out cursor-pointer inline-block select-none hover:opacity-100;
&.disabled {
@apply hover:opacity-50 cursor-not-allowed;
}
}

@ -0,0 +1 @@
export * from './local'

@ -0,0 +1,4 @@
import { Ref } from 'vue'
import { useStorage } from '@vueuse/core'
export const colorSchema = useStorage('vitesse-schema', 'auto')

@ -0,0 +1,16 @@
module.exports = {
purge: [
'./src/**/*.html',
'./src/**/*.{vue,js,ts,jsx,tsx}'
],
content: [],
theme: {
extend: {},
fontFamily: {
"noto-serif": ['"Noto Serif"', 'serif']
}
},
plugins: [
require('tailwind-percentage-property')
],
}

@ -1,52 +0,0 @@
#!/usr/bin/env python3.8
# -*- coding: UTF-8 -*-
"""
Create the description for a word to be added to the word list
Usage: addword.py <word>
"""
import re
import sys
import urllib.request
from bs4 import BeautifulSoup
def main():
"""Generate the information with pronunciations for a word to be added to the word list"""
if len(sys.argv) != 2:
print(__doc__)
sys.exit(1)
word = sys.argv[1]
pronunciations = get_pronunciations(word)
britsh_en = '[🔊](' + pronunciations[0][0] + ')' + ' ' + '/' + pronunciations[0][1] + '/'
american_en = '[🔊](' + pronunciations[1][0] + ')' + ' ' + '/' + pronunciations[1][1] + '/'
line = '| ' + word + ' | ' + britsh_en + ' | ' + american_en + ' | ' + ' ' + '|'
print(line)
def get_pronunciations(word):
"""Return the word's pronouciation URLs and phonetic transcriptions
from youdao.com if available"""
word = word.strip()
word_url = 'https://dict.youdao.com/w/en/' + word
pron_url = 'https://dict.youdao.com/dictvoice?audio='+ word + '&'
britsh_en = [" ", " "]
american_en = [" ", " "]
try:
response = urllib.request.urlopen(word_url).read()
soup = BeautifulSoup(response, 'html.parser')
spans = soup.find_all('span', {'class': 'pronounce'})
lines = [span.get_text() for span in spans]
match = re.findall(r'\[.+\]', lines[0])
britsh_en[0] = pron_url + 'type=1'
britsh_en[1] = match[0].replace('[', '').replace(']', '')
match = re.findall(r'\[.+\]', lines[1])
american_en[0] = pron_url + 'type=2'
american_en[1] = match[0].replace('[', '').replace(']', '')
except:
return britsh_en, american_en
return britsh_en, american_en
if __name__ == '__main__':
main()

@ -1,25 +0,0 @@
# 无页面跳转收听正确读音 的 chromium 扩展
## [获得最新版扩展](https://github.com/jingjingxyk/chinese-programmer-wrong-pronunciation.git)
## 手动安装扩展
> 1. 下载 [chinese-programmer-wrong-pronunciation](https://github.com/shimohq/chinese-programmer-wrong-pronunciation/archive/refs/heads/master.zip) 然后解压,找到 `tools/chromium_extension` 子目录
> 2. 打开 Chrome输入: `chrome://extensions/`
> 3. 勾选 Developer Mode
> 4. 选择 Load unpacked extension... 然后定位到刚才解压的文件夹里面的 `tools/chromium_extension` 目录,确定
> 5. 这就安装好了,去掉 Developer Mode 勾选。
> 6. 打开[`https://github.com/shimohq/chinese-programmer-wrong-pronunciation.git`](https://github.com/shimohq/chinese-programmer-wrong-pronunciation.git)点击单词,即可听正确的单词读音
## 扩展开发参考
1. [content_scripts](https:////developer.chrome.com/docs/extensions/mv3/content_scripts/)
1. [Declare permissions](https:////developer.chrome.com/docs/extensions/mv3/declare_permissions/)
1. [ReplaceGoogleCDN](https://github.com/justjavac/ReplaceGoogleCDN.git)
## note
```text
https://dict.youdao.com/dictvoice?audio=parameter&type=1
```

@ -1,31 +0,0 @@
tr:hover {
border: 8px solid #ddd !important;
border-radius: 8px !important;
box-shadow: 5px 5px 15px #daf5fe !important;
color: #fff !important;
background-color: #3ec487 !important;
/*
font-weight: 200;
font-size: 1.1rem;
*/
}
#chinese-programmer-wrong-pronunciation-custom-iframe-box {
border: 8px solid #ddd !important;
border-radius: 8px !important;
box-shadow: 5px 5px 15px #daf5fe !important;
z-index: 999;
position: fixed !important;
}
.chinese-programmer-wrong-pronunciation-custom-iframe-box {
right: 0 !important;
top: 64px !important;
}
#chinese-programmer-wrong-pronunciation-custom-iframe {
width: 100%;
height: 100%;
min-width: 700px !important;
min-height: 600px !important;
}

@ -1,8 +0,0 @@
#!/bin/env bash
set -exu
__DIR__=$(cd "$(dirname "$0")";pwd)
cd ${__DIR__}
npm run format-code

@ -1,9 +0,0 @@
# 新增功能截图
## 嵌入搜索引擎 谷歌搜索
![](https://github.com/jingjingxyk/chinese-programmer-wrong-pronunciation/blob/master/tools/chromium_extension/images/%E6%88%AA%E5%9B%BE2022-06-14-22-11.png?raw=true)
## 嵌入搜索引擎 有道搜索
![](https://raw.githubusercontent.com/jingjingxyk/chinese-programmer-wrong-pronunciation/master/tools/chromium_extension/images/截图2022-06-14-22-10.png)

Binary file not shown.

Before

Width:  |  Height:  |  Size: 262 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 193 KiB

@ -1,42 +0,0 @@
import * as utils from "./utils.js";
import * as components from "./components.js";
import * as searchEngine from "./search-engine.js";
let goToSearchPronounce = (word) => {
let search_engine_name = "gotToGoogleSearch";
// search_engine_name='gotToYouDaoSearch'
// search_engine_name = "goToBingDictSearch";
// search_engine_name = "goToBingSearch";
search_engine_name = "gotToYouDaoSearch";
// search_engine_name = "goToBaiduFanYiSearch";
//let tab = "current_tab";
let tab = "new_tab"; //修改默认为新标签页打开
let opener = components.getSearchEngineOpener();
if (opener && opener.expired_date) {
if (opener.expired_date > new Date().getTime()) {
if (opener.search_engine_name) {
search_engine_name = opener.search_engine_name;
}
if (opener.tab) {
tab = opener.tab;
}
}
}
if (search_engine_name && searchEngine[search_engine_name]) {
console.log(word);
let url = searchEngine[search_engine_name](word);
console.log(url);
if (tab === "new_tab") {
window.open(url, "_blank");
} else {
let iframe = components.getIframe();
iframe.setAttribute("src", url);
}
} else {
console.log("search engine no found !");
}
};
let box = { ...utils, ...components, ...searchEngine, goToSearchPronounce };
export default box;

@ -1,131 +0,0 @@
import { prettyBox } from "./pretty-box.js";
let styleConfig = () => {
let css = document.createElement("link");
css.setAttribute("rel", "stylesheet");
css.setAttribute("type", "text/css");
css.setAttribute("href", chrome.runtime.getURL("css/app.css"));
document.head.appendChild(css);
};
let customElement = () => {
let link = document.createElement("link");
link.setAttribute(
"href",
chrome.runtime.getURL("web-components/x-custom-box.html")
);
document.head.appendChild(link);
};
let getIframe = () => {
let box = document.querySelector(
"#chinese-programmer-wrong-pronunciation-custom-iframe-box"
);
let iframe = null;
if (!box) {
let custom_box = document.createElement(
"x-chinese-programmer-wrong-pronunciation-custom-box"
);
let aside = document.createElement("aside");
aside.setAttribute(
"id",
"chinese-programmer-wrong-pronunciation-custom-iframe-box"
);
aside.setAttribute(
"class",
"chinese-programmer-wrong-pronunciation-custom-iframe-box"
);
aside.setAttribute("draggable", "true");
iframe = document.createElement("iframe");
iframe.setAttribute(
"id",
"chinese-programmer-wrong-pronunciation-custom-iframe"
);
iframe.setAttribute("security", "restricted");
//iframe.setAttribute('sandbox',"")
aside.appendChild(iframe);
custom_box.appendChild(aside);
document.body.appendChild(custom_box);
//设置 box 可 拖拽
prettyBox(aside);
//显示重置按键
//showResetCurrentSearchEngineTab()
} else {
iframe = box.querySelector(
"#chinese-programmer-wrong-pronunciation-custom-iframe"
);
}
return iframe;
};
let opener_key = "how-to-pronounce-from-search-engine-open-tab-opener";
let getSearchEngineOpener = () => {
return JSON.parse(sessionStorage.getItem(opener_key));
};
let showResetCurrentSearchEngineTab = () => {
let div = document.createElement("div");
div.setAttribute(
"id",
"#chinese-programmer-wrong-pronunciation-custom-tools-bar"
);
div.innerHTML = `
<span>关闭搜索页面</span>🥳🥳🥳🥳🥳🥳<span></span>
`;
document
.querySelector("#chinese-programmer-wrong-pronunciation-custom-iframe-box")
.appendChild(div);
};
let setSearchEngineOpener = (search_engine_name, tab) => {
let opener = getSearchEngineOpener();
if (!opener || opener.expired_date < new Date().getTime()) {
search_engine_name = "gotToGoogleSearch";
/*
if (window.confirm('默认有道词典搜索,选择 “取消” 将设置为谷歌搜索,有效期一天')) { //当前页面展示搜索结果
search_engine_name = "gotToYouDaoSearch"
} else {
//新开标签页展示搜索结果
search_engine_name = "gotToGoogleSearch"
}
*/
//页面展示方式,默认有效期一天
let expired_date = new Date().getTime() + 24 * 60 * 60 * 1000;
// expired_date = (new Date()).getTime() + 10000 # test expired
tab = "current_tab";
/*
if (window.confirm('允许当前页面展示搜索结果')) { //当前页面展示搜索结果
tab = "current_tab"
} else {
//新开标签页展示搜索结果
tab = "new_tab"
}
*/
sessionStorage.setItem(
opener_key,
JSON.stringify({
tab: tab,
expired_date: expired_date,
search_engine_name: search_engine_name,
})
);
}
};
let cleanOpener = () => {
sessionStorage.removeItem(opener_key);
};
export {
styleConfig,
customElement,
getIframe,
getSearchEngineOpener,
setSearchEngineOpener,
};

@ -1,66 +0,0 @@
import box from "./box.js";
let init = () => {
let URLObj = new URL(location.href);
console.log(URLObj);
if (document.querySelector("#readme table tbody")) {
box.styleConfig();
box.customElement();
let audio_player = new Audio();
audio_player.setAttribute("autoplay", "true");
document
.querySelector("#readme table tbody")
.addEventListener("click", (event) => {
//console.log(event.target)
// console.log(event.target.nodeType)
// console.log(event.target.nodeName);
let parentElement = event.target.parentElement;
if (parentElement && parentElement.nodeName === "TR") {
if (parentElement.firstElementChild === event.target) {
//使用搜索引擎查询发音
box.goToSearchPronounce(event.target.innerText);
}
}
event.preventDefault();
event.stopPropagation();
let audio_url = null;
if (event.target.nodeName === "TD") {
let aTag = event.target.querySelector("a");
if (aTag) {
audio_url = aTag.getAttribute("href");
}
}
if (event.target.nodeName === "IMG") {
let aTag = event.target.parentNode.parentNode;
audio_url = aTag.getAttribute("href");
}
if (audio_url) {
let desURL = new URL(audio_url);
//console.log(desURL.protocol);
if (desURL.protocol === "http:") {
//skip http
location.href = audio_url;
} else {
// console.log("audio_url:", audio_url);
audio_player.setAttribute("src", audio_url);
}
}
});
document
.querySelector("#readme table tbody")
.addEventListener("mouseover", (event) => {
let parentElement = event.target.parentElement;
if (parentElement && parentElement.nodeName === "TR") {
if (parentElement.firstElementChild === event.target) {
event.target.setAttribute("title", "点击我打开搜索引擎检索");
event.target.style.cursor = "pointer";
}
}
});
} else {
console.log("no found README.md table");
}
};
export { init };

@ -1,74 +0,0 @@
import { addClass, removeClass } from "./utils.js";
let prettyBox = (box) => {
// 参考 https://blog.csdn.net/weixin_41910848/article/details/82218243
let dragging = false;
let diffX = null;
let diffY = null;
box.onmousedown = function (event) {
dragging = true;
let left = box.offsetLeft;
let top = box.offsetTop;
removeClass(
box,
"chinese-programmer-wrong-pronunciation-custom-iframe-box"
);
box.style.left = left + "px";
box.style.top = top + "px";
diffX = event.clientX - left;
diffY = event.clientY - top;
};
document.onmousemove = function (event) {
if (dragging) {
// console.log(event.clientX, event.clientY)
//console.log(diffX, diffY)
let moveX = event.clientX - diffX;
let moveY = event.clientY - diffY;
if (moveX < 0) {
moveX = 0;
} else if (moveX > window.innerWidth - box.offsetWidth) {
moveX = window.innerWidth - box.offsetWidth;
}
if (moveY < 0) {
moveY = 0;
} else if (moveY > window.innerHeight - box.offsetHeight) {
moveY = window.innerHeight - box.offsetHeight;
}
box.style.left = moveX + "px";
box.style.top = moveY + "px";
event.stopPropagation();
event.preventDefault();
}
};
document.onmouseup = function (event) {
dragging = false;
};
box.onmouseup = (event) => {
dragging = false;
};
box.ondragstart = function (event) {
console.log(box.offsetLeft, box.offsetTop);
console.log("开始拖拽");
};
box.ondrag = function () {
console.log(box.offsetLeft, box.offsetTop);
console.log("拖拽中");
};
box.ondragend = function () {
console.log(box.offsetLeft, box.offsetTop);
console.log("拖拽结束");
};
};
export { prettyBox };

@ -1,44 +0,0 @@
let gotToGoogleSearch = (word) => {
word = word.replace(/\s/, "+");
return `https://www.google.com/search?q=how+to+pronounce+${word}`;
};
let gotToYouDaoSearch = (word) => {
word = word.replace(/\s/, "+");
return `https://www.youdao.com/result?word=${word}&lang=en`;
};
let goToBingDictSearch = (word) => {
return `https://cn.bing.com/dict/${word}`;
};
let goToBingSearch = (word) => {
return `https://cn.bing.com/search?q=how%20to%20pronounce%20${word}`;
};
let goToBaiduDictSearch = (word) => {
return `https://dict.baidu.com/s?wd=${word}`;
};
let goToBaiduFanYiSearch = (word) => {
return `https://fanyi.baidu.com/#en/zh/${word}`;
};
let goToBaiDuHanYu = () => {
// 一点飞上天,黄河两头弯;八字大张口,言字中间走;左一扭,右一扭,你一长,我一长,中间加个马大王;心字底,月字旁,一个小勾挂麻糖,坐个车子逛咸阳。
// 56个笔画的字 邉
// U+30EDE (简化版本 U+30EDD
{
"汉".charCodeAt(0).toString(16);
String.fromCharCode("0x6c49");
}
//https://hanyu.baidu.com/s?wd=%E9%82%89
};
export {
goToBaiDuHanYu,
gotToYouDaoSearch,
gotToGoogleSearch,
goToBingDictSearch,
goToBingSearch,
goToBaiduDictSearch,
goToBaiduFanYiSearch,
};

@ -1,103 +0,0 @@
function hasClass(el, className) {
if (el.classList) return el.classList.contains(className);
return !!el.className.match(new RegExp("(\\s|^)" + className + "(\\s|$)"));
}
function addClass(el, className) {
if (el.classList) el.classList.add(className);
else if (!hasClass(el, className)) el.className += " " + className;
}
function removeClass(el, className) {
if (el.classList) el.classList.remove(className);
else if (hasClass(el, className)) {
let reg = new RegExp("(\\s|^)" + className + "(\\s|$)");
el.className = el.className.replace(reg, " ");
}
}
function getCookie(name) {
let arr,
reg = new RegExp("(^| )" + name + "=([^;]*)(;|$)");
if ((arr = document.cookie.match(reg))) {
return decodeURIComponent(arr[2]);
} else {
return null;
}
//await cookieStore.get({name:name})
}
// https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Set-Cookie
function setCookie(name, value, second, domain) {
var exp = new Date();
exp.setTime(exp.getTime() + second * 1000);
document.cookie =
name +
"=" +
encodeURIComponent(value) +
";expires=" +
exp.toGMTString() +
";path=/;domain=" +
domain +
";SameSite=None;Secure";
}
async function getCookies(domain) {
let cookies = await cookieStore.getAll({ domain: domain });
return cookies;
}
function encodeBase64(str) {
return btoa(encodeURIComponent(str));
}
function decodeBase64(encoded) {
return decodeURIComponent(atob(encoded));
}
function getParameterValue(name) {
let reg = new RegExp("[^?&]?" + encodeURI(name) + "=[^&]+");
let arr = location.search.match(reg);
if (arr != null) {
return decodeURI(arr[0].substring(arr[0].search("=") + 1));
}
return "";
}
function createJSONFile(content, filename) {
let blob = new Blob([JSON.stringify(content)], { type: "application/json" });
let url = window.URL.createObjectURL(blob);
let a = document.createElement("a");
a.style.display = "none";
a.href = url;
a.download = filename;
a.click();
setTimeout(function () {
window.URL.revokeObjectURL(url);
}, 3000);
}
async function sleep(time) {
return new Promise((resolve) => setTimeout(resolve, time));
}
async function getMediaDevices() {
return await navigator.mediaDevices.enumerateDevices();
}
// new URLSearchParams
// new URL
// (new Date()).toISOString()
export {
addClass,
removeClass,
hasClass,
setCookie,
getCookie,
encodeBase64,
decodeBase64,
getParameterValue,
sleep,
getMediaDevices,
createJSONFile,
};

@ -1,4 +0,0 @@
(async () => {
let app = await import(chrome.runtime.getURL("js/app/init.js"));
app.init();
})();

@ -1,49 +0,0 @@
{
"name": "chinese-programmer-wrong-pronunciation-chromium-extension",
"version": "0.1.0",
"manifest_version": 3,
"description": "页面无跳转 听正确读音",
"content_scripts": [
{
"matches": [
"*://*/shimohq/chinese-programmer-wrong-pronunciation/*",
"*://*/jingjingxyk/chinese-programmer-wrong-pronunciation/*"
],
"run_at": "document_idle",
"js": ["js/content-script.js"]
}
],
"permissions": [
"declarativeNetRequest",
"declarativeNetRequestWithHostAccess"
],
"host_permissions": [
"*://github.com/*",
"*://www.google.com/*",
"*://cn.bing.com/*",
"*://www.bing.com/*",
"*://dict.baidu.com/*",
"*://www.youdao.com/*",
"*://dict.youdao.com/*",
"*://fanyi.baidu.com/*"
],
"web_accessible_resources": [
{
"resources": ["*.js", "*.css", "*.html"],
"matches": ["*://*/*"],
"extension_ids": [],
"use_dynamic_url": true
}
],
"declarative_net_request": {
"rule_resources": [
{
"id": "remove_content_security_policy",
"enabled": true,
"path": "rules/remove_content_security_policy.json"
}
]
},
"author": "https://github.com/jingjingxyk",
"homepage_url": "https://github.com/shimohq/chinese-programmer-wrong-pronunciation.git"
}

@ -1,14 +0,0 @@
{
"name": "chinese-programmer-wrong-pronunciation-chromium-extension",
"version": "1.0.0",
"description": "README.md 页面无跳转 即可听正确读音",
"main": "index.js",
"scripts": {
"format-code": "npx prettier --write . && exit 1"
},
"author": "",
"license": "ISC",
"devDependencies": {
"prettier": "2.6.2"
}
}

@ -1,72 +0,0 @@
[
{
"id": 1,
"priority": 99,
"action": {
"type": "modifyHeaders",
"responseHeaders": [
{ "header": "content-security-policy", "operation": "remove" },
{
"header": "content-security-policy-report-only",
"operation": "remove"
},
{ "header": "expect-ct", "operation": "remove" },
{ "header": "report-to", "operation": "remove" },
{ "header": "x-content-security-policy", "operation": "remove" },
{ "header": "x-webkit-csp", "operation": "remove" },
{ "header": "x-xss-protection", "operation": "remove" },
{
"header": "x-permitted-cross-domain-policies",
"operation": "remove"
},
{ "header": "x-content-type-options", "operation": "remove" },
{ "header": "x-frame-options", "operation": "remove" },
{ "header": "X-Frame-Options", "operation": "remove" },
{ "header": "permissions-policy", "operation": "remove" },
{ "header": "timing-allow-origin", "operation": "remove" },
{ "header": "cross-origin-embedder-policy", "operation": "remove" },
{ "header": "cross-origin-opener-policy", "operation": "remove" },
{
"header": "cross-origin-opener-policy-report-only",
"operation": "remove"
},
{
"header": "cross-origin-embedder-policy-report-only",
"operation": "remove"
}
]
},
"condition": {
"urlFilter": "*",
"requestDomains": [
"github.com",
"githubusercontent.com",
"www.google.com",
"cn.bing.com",
"www.bing.com",
"fanyi.baidu.com",
"dict.baidu.com",
"www.youdao.com",
"dict.youdao.com",
"fanyi.baidu.com"
],
"resourceTypes": [
"main_frame",
"sub_frame",
"stylesheet",
"script",
"image",
"font",
"object",
"xmlhttprequest",
"ping",
"csp_report",
"media",
"websocket",
"webtransport",
"webbundle",
"other"
]
}
}
]

@ -1,3 +0,0 @@
# HTML ImportsHTML Template、Shadow DOM----统称为 Web Components 规范
## Shadow DOM 实现代码隔离

@ -1,3 +0,0 @@
<x-chinese-programmer-wrong-pronunciation-custom-box>
<div>自定义web组件-做代码隔离</div>
</x-chinese-programmer-wrong-pronunciation-custom-box>

@ -0,0 +1,23 @@
import { defineConfig } from 'vite'
import vue from '@vitejs/plugin-vue'
const path = require('path')
// https://vitejs.dev/config/
export default defineConfig({
plugins: [vue()],
build: {
outDir: 'docs',
assetsDir: '',
},
define: {
'process.env': {
BASE_URL: '/'
}
},
resolve: {
alias: [
{ find: '@', replacement: '/src' },
]
}
})
Loading…
Cancel
Save