├── .editorconfig ├── .github ├── FUNDING.yml └── workflows │ └── lint.yml ├── .gitignore ├── .yamllint ├── CONTRIBUTING.md ├── LICENSE ├── Makefile ├── README.md ├── build.py ├── cc-by-sa.svg ├── en.md ├── hooks └── pre-commit ├── ja.md ├── ko.md ├── requirements.txt ├── script.js ├── style.css ├── table.schema.yaml ├── tables ├── basic.yaml ├── concurrency.yaml ├── foss.yaml ├── paradigms.yaml ├── programming.yaml ├── studies.yaml ├── theory-comp.yaml ├── tools.yaml └── units.yaml ├── templates ├── layout.html └── table.html └── zh-Hant.md /.editorconfig: -------------------------------------------------------------------------------- 1 | root = true 2 | 3 | [*] 4 | end_of_line = lf 5 | charset = utf-8 6 | insert_final_newline = true 7 | trim_trailing_whitespace = true 8 | 9 | [*.py] 10 | indent_style = space 11 | indent_size = 4 12 | 13 | [Makefile] 14 | indent_style = tab 15 | 16 | [*.{css,js,yaml,yml}] 17 | indent_style = space 18 | indent_size = 2 19 | -------------------------------------------------------------------------------- /.github/FUNDING.yml: -------------------------------------------------------------------------------- 1 | github: dahlia 2 | -------------------------------------------------------------------------------- /.github/workflows/lint.yml: -------------------------------------------------------------------------------- 1 | name: Lint 2 | on: [push, pull_request] 3 | 4 | jobs: 5 | lint: 6 | runs-on: ubuntu-latest 7 | steps: 8 | - uses: actions/checkout@v1 9 | - uses: dahlia/actions/yajsv@master 10 | with: 11 | schema: table.schema.yaml 12 | documents: tables/*.yaml 13 | - uses: zbeekman/EditorConfig-Action@master 14 | - uses: ibiqlik/action-yamllint@v3.0.0 15 | with: 16 | strict: yes 17 | 18 | build: 19 | runs-on: ubuntu-latest 20 | steps: 21 | - uses: actions/checkout@v1 22 | - uses: actions/setup-python@v2 23 | with: 24 | python-version: '3.10' 25 | - run: make -j validate-html5 26 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | .venv/ 2 | _site/ 3 | bin/yajsv 4 | get-pip.py 5 | public_html/ 6 | -------------------------------------------------------------------------------- /.yamllint: -------------------------------------------------------------------------------- 1 | extends: default 2 | 3 | yaml-files: 4 | - tables/*.yaml 5 | - .github/workflows/*.yml 6 | 7 | rules: 8 | braces: 9 | forbid: no 10 | min-spaces-inside: 1 11 | max-spaces-inside: -1 12 | min-spaces-inside-empty: 0 13 | max-spaces-inside-empty: 0 14 | brackets: 15 | forbid: no 16 | min-spaces-inside: 0 17 | max-spaces-inside: -1 18 | min-spaces-inside-empty: 0 19 | max-spaces-inside-empty: 0 20 | colons: 21 | max-spaces-before: 0 22 | max-spaces-after: -1 23 | commas: 24 | max-spaces-before: 0 25 | min-spaces-after: 1 26 | max-spaces-after: -1 27 | comments: 28 | require-starting-space: yes 29 | min-spaces-from-content: 1 30 | document-end: no 31 | document-start: no 32 | empty-lines: 33 | max: 1 34 | max-start: 0 35 | max-end: 1 36 | empty-values: 37 | forbid-in-block-mappings: true 38 | forbid-in-flow-mappings: true 39 | hyphens: 40 | max-spaces-after: 1 41 | indentation: 42 | spaces: 2 43 | indent-sequences: no 44 | key-duplicates: {} 45 | line-length: 46 | max: 80 47 | allow-non-breakable-words: yes 48 | new-lines: 49 | type: unix 50 | octal-values: 51 | forbid-implicit-octal: yes 52 | forbid-explicit-octal: no 53 | quoted-strings: 54 | quote-type: double 55 | required: only-when-needed 56 | trailing-spaces: {} 57 | truthy: 58 | allowed-values: ["yes", "no"] 59 | 60 | # vim: set et sw=2 ts=2 sts=2 ft=yaml: 61 | -------------------------------------------------------------------------------- /CONTRIBUTING.md: -------------------------------------------------------------------------------- 1 | Contribution guide / 參與指針 2 | ============================= 3 | 4 | - Please be kind to each other. 5 | - All issues, pull requests, and comments should be written in one of 6 | the following four languages: English (preferred), Chinese, Japanese, 7 | or Korean. 8 | 9 | 10 | How to build 11 | ------------ 12 | 13 | Prerequisites are: 14 | 15 | - POSIX-compliant environment (e.g., Linux, macOS) 16 | - Python 3.10+ 17 | - GNU Make 18 | - GNU Wget or `curl` 19 | 20 | Optionally you may need Java Runtime as well if you want to validate HTML files. 21 | 22 | The single command to build the whole website is:[^1] 23 | 24 | make -j 25 | 26 | This command takes much longer time at the first run as it installs dependent 27 | libraries. As all dependencies are installed at first run, runs from second 28 | are faster than the first run. 29 | 30 | The built files are placed to the *public_html/* directory. 31 | 32 | [^1]: Option `-j`, which can be omitted, lets `make` run independent build jobs 33 | in parallel. 34 | 35 | 36 | How to add words 37 | ---------------- 38 | 39 | Word data are placed in the *tables/* directory. Each *.yaml* file contains 40 | a single topic. 41 | 42 | Unfortunately, the file format is not documented yet. However, you can still 43 | add new words by mimicking other existing words. Few keywords: 44 | 45 | - Every word has an identifier. This should be normalized to be grouped 46 | with cognates. 47 | - Sino-Japanese and Sino-Korean roots/words should be written in 48 | Chinese characters. E.g.: `전산학` → `電算學`. 49 | - All Chinese characters should be in traditional and orthodox form 50 | (繁體字/舊字體/《康熙字典》體). E.g.: `科学` → `科學`. 51 | - All roots/stems that transliterates English (or other Western languages) 52 | word should be in small Latin letters. Only proper nouns are 53 | exceptional. E.g.: `圖靈` → `Turing`, `コンピュータ` → `computer`, 54 | `버그` → `bug`. 55 | - All roots/stems with Chinese characters should not be separated by 56 | spaces, unless they are next to a root/stem with Latin characters. 57 | E.g.: `암호 이론` → `暗號理論`, `コンピュータ科学` → `computer 科學`, 58 | `コンピュータセキュリティ` → `computer security`. 59 | - `loan:` indicates a root/word is a part of a loan translation and what 60 | the original word is. 61 | - `read:` specifies phonetic rendering of a root/word. Separated by 62 | spaces to pair with Chinese characters. 63 | - `correspond:` specifies the correspondence in the original language 64 | of a root/word. 65 | -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | Attribution-ShareAlike 4.0 International 2 | 3 | ======================================================================= 4 | 5 | Creative Commons Corporation ("Creative Commons") is not a law firm and 6 | does not provide legal services or legal advice. Distribution of 7 | Creative Commons public licenses does not create a lawyer-client or 8 | other relationship. Creative Commons makes its licenses and related 9 | information available on an "as-is" basis. Creative Commons gives no 10 | warranties regarding its licenses, any material licensed under their 11 | terms and conditions, or any related information. Creative Commons 12 | disclaims all liability for damages resulting from their use to the 13 | fullest extent possible. 14 | 15 | Using Creative Commons Public Licenses 16 | 17 | Creative Commons public licenses provide a standard set of terms and 18 | conditions that creators and other rights holders may use to share 19 | original works of authorship and other material subject to copyright 20 | and certain other rights specified in the public license below. The 21 | following considerations are for informational purposes only, are not 22 | exhaustive, and do not form part of our licenses. 23 | 24 | Considerations for licensors: Our public licenses are 25 | intended for use by those authorized to give the public 26 | permission to use material in ways otherwise restricted by 27 | copyright and certain other rights. Our licenses are 28 | irrevocable. Licensors should read and understand the terms 29 | and conditions of the license they choose before applying it. 30 | Licensors should also secure all rights necessary before 31 | applying our licenses so that the public can reuse the 32 | material as expected. Licensors should clearly mark any 33 | material not subject to the license. This includes other CC- 34 | licensed material, or material used under an exception or 35 | limitation to copyright. More considerations for licensors: 36 | wiki.creativecommons.org/Considerations_for_licensors 37 | 38 | Considerations for the public: By using one of our public 39 | licenses, a licensor grants the public permission to use the 40 | licensed material under specified terms and conditions. If 41 | the licensor's permission is not necessary for any reason--for 42 | example, because of any applicable exception or limitation to 43 | copyright--then that use is not regulated by the license. Our 44 | licenses grant only permissions under copyright and certain 45 | other rights that a licensor has authority to grant. Use of 46 | the licensed material may still be restricted for other 47 | reasons, including because others have copyright or other 48 | rights in the material. A licensor may make special requests, 49 | such as asking that all changes be marked or described. 50 | Although not required by our licenses, you are encouraged to 51 | respect those requests where reasonable. More considerations 52 | for the public: 53 | wiki.creativecommons.org/Considerations_for_licensees 54 | 55 | ======================================================================= 56 | 57 | Creative Commons Attribution-ShareAlike 4.0 International Public 58 | License 59 | 60 | By exercising the Licensed Rights (defined below), You accept and agree 61 | to be bound by the terms and conditions of this Creative Commons 62 | Attribution-ShareAlike 4.0 International Public License ("Public 63 | License"). To the extent this Public License may be interpreted as a 64 | contract, You are granted the Licensed Rights in consideration of Your 65 | acceptance of these terms and conditions, and the Licensor grants You 66 | such rights in consideration of benefits the Licensor receives from 67 | making the Licensed Material available under these terms and 68 | conditions. 69 | 70 | 71 | Section 1 -- Definitions. 72 | 73 | a. Adapted Material means material subject to Copyright and Similar 74 | Rights that is derived from or based upon the Licensed Material 75 | and in which the Licensed Material is translated, altered, 76 | arranged, transformed, or otherwise modified in a manner requiring 77 | permission under the Copyright and Similar Rights held by the 78 | Licensor. For purposes of this Public License, where the Licensed 79 | Material is a musical work, performance, or sound recording, 80 | Adapted Material is always produced where the Licensed Material is 81 | synched in timed relation with a moving image. 82 | 83 | b. Adapter's License means the license You apply to Your Copyright 84 | and Similar Rights in Your contributions to Adapted Material in 85 | accordance with the terms and conditions of this Public License. 86 | 87 | c. BY-SA Compatible License means a license listed at 88 | creativecommons.org/compatiblelicenses, approved by Creative 89 | Commons as essentially the equivalent of this Public License. 90 | 91 | d. Copyright and Similar Rights means copyright and/or similar rights 92 | closely related to copyright including, without limitation, 93 | performance, broadcast, sound recording, and Sui Generis Database 94 | Rights, without regard to how the rights are labeled or 95 | categorized. For purposes of this Public License, the rights 96 | specified in Section 2(b)(1)-(2) are not Copyright and Similar 97 | Rights. 98 | 99 | e. Effective Technological Measures means those measures that, in the 100 | absence of proper authority, may not be circumvented under laws 101 | fulfilling obligations under Article 11 of the WIPO Copyright 102 | Treaty adopted on December 20, 1996, and/or similar international 103 | agreements. 104 | 105 | f. Exceptions and Limitations means fair use, fair dealing, and/or 106 | any other exception or limitation to Copyright and Similar Rights 107 | that applies to Your use of the Licensed Material. 108 | 109 | g. License Elements means the license attributes listed in the name 110 | of a Creative Commons Public License. The License Elements of this 111 | Public License are Attribution and ShareAlike. 112 | 113 | h. Licensed Material means the artistic or literary work, database, 114 | or other material to which the Licensor applied this Public 115 | License. 116 | 117 | i. Licensed Rights means the rights granted to You subject to the 118 | terms and conditions of this Public License, which are limited to 119 | all Copyright and Similar Rights that apply to Your use of the 120 | Licensed Material and that the Licensor has authority to license. 121 | 122 | j. Licensor means the individual(s) or entity(ies) granting rights 123 | under this Public License. 124 | 125 | k. Share means to provide material to the public by any means or 126 | process that requires permission under the Licensed Rights, such 127 | as reproduction, public display, public performance, distribution, 128 | dissemination, communication, or importation, and to make material 129 | available to the public including in ways that members of the 130 | public may access the material from a place and at a time 131 | individually chosen by them. 132 | 133 | l. Sui Generis Database Rights means rights other than copyright 134 | resulting from Directive 96/9/EC of the European Parliament and of 135 | the Council of 11 March 1996 on the legal protection of databases, 136 | as amended and/or succeeded, as well as other essentially 137 | equivalent rights anywhere in the world. 138 | 139 | m. You means the individual or entity exercising the Licensed Rights 140 | under this Public License. Your has a corresponding meaning. 141 | 142 | 143 | Section 2 -- Scope. 144 | 145 | a. License grant. 146 | 147 | 1. Subject to the terms and conditions of this Public License, 148 | the Licensor hereby grants You a worldwide, royalty-free, 149 | non-sublicensable, non-exclusive, irrevocable license to 150 | exercise the Licensed Rights in the Licensed Material to: 151 | 152 | a. reproduce and Share the Licensed Material, in whole or 153 | in part; and 154 | 155 | b. produce, reproduce, and Share Adapted Material. 156 | 157 | 2. Exceptions and Limitations. For the avoidance of doubt, where 158 | Exceptions and Limitations apply to Your use, this Public 159 | License does not apply, and You do not need to comply with 160 | its terms and conditions. 161 | 162 | 3. Term. The term of this Public License is specified in Section 163 | 6(a). 164 | 165 | 4. Media and formats; technical modifications allowed. The 166 | Licensor authorizes You to exercise the Licensed Rights in 167 | all media and formats whether now known or hereafter created, 168 | and to make technical modifications necessary to do so. The 169 | Licensor waives and/or agrees not to assert any right or 170 | authority to forbid You from making technical modifications 171 | necessary to exercise the Licensed Rights, including 172 | technical modifications necessary to circumvent Effective 173 | Technological Measures. For purposes of this Public License, 174 | simply making modifications authorized by this Section 2(a) 175 | (4) never produces Adapted Material. 176 | 177 | 5. Downstream recipients. 178 | 179 | a. Offer from the Licensor -- Licensed Material. Every 180 | recipient of the Licensed Material automatically 181 | receives an offer from the Licensor to exercise the 182 | Licensed Rights under the terms and conditions of this 183 | Public License. 184 | 185 | b. Additional offer from the Licensor -- Adapted Material. 186 | Every recipient of Adapted Material from You 187 | automatically receives an offer from the Licensor to 188 | exercise the Licensed Rights in the Adapted Material 189 | under the conditions of the Adapter's License You apply. 190 | 191 | c. No downstream restrictions. You may not offer or impose 192 | any additional or different terms or conditions on, or 193 | apply any Effective Technological Measures to, the 194 | Licensed Material if doing so restricts exercise of the 195 | Licensed Rights by any recipient of the Licensed 196 | Material. 197 | 198 | 6. No endorsement. Nothing in this Public License constitutes or 199 | may be construed as permission to assert or imply that You 200 | are, or that Your use of the Licensed Material is, connected 201 | with, or sponsored, endorsed, or granted official status by, 202 | the Licensor or others designated to receive attribution as 203 | provided in Section 3(a)(1)(A)(i). 204 | 205 | b. Other rights. 206 | 207 | 1. Moral rights, such as the right of integrity, are not 208 | licensed under this Public License, nor are publicity, 209 | privacy, and/or other similar personality rights; however, to 210 | the extent possible, the Licensor waives and/or agrees not to 211 | assert any such rights held by the Licensor to the limited 212 | extent necessary to allow You to exercise the Licensed 213 | Rights, but not otherwise. 214 | 215 | 2. Patent and trademark rights are not licensed under this 216 | Public License. 217 | 218 | 3. To the extent possible, the Licensor waives any right to 219 | collect royalties from You for the exercise of the Licensed 220 | Rights, whether directly or through a collecting society 221 | under any voluntary or waivable statutory or compulsory 222 | licensing scheme. In all other cases the Licensor expressly 223 | reserves any right to collect such royalties. 224 | 225 | 226 | Section 3 -- License Conditions. 227 | 228 | Your exercise of the Licensed Rights is expressly made subject to the 229 | following conditions. 230 | 231 | a. Attribution. 232 | 233 | 1. If You Share the Licensed Material (including in modified 234 | form), You must: 235 | 236 | a. retain the following if it is supplied by the Licensor 237 | with the Licensed Material: 238 | 239 | i. identification of the creator(s) of the Licensed 240 | Material and any others designated to receive 241 | attribution, in any reasonable manner requested by 242 | the Licensor (including by pseudonym if 243 | designated); 244 | 245 | ii. a copyright notice; 246 | 247 | iii. a notice that refers to this Public License; 248 | 249 | iv. a notice that refers to the disclaimer of 250 | warranties; 251 | 252 | v. a URI or hyperlink to the Licensed Material to the 253 | extent reasonably practicable; 254 | 255 | b. indicate if You modified the Licensed Material and 256 | retain an indication of any previous modifications; and 257 | 258 | c. indicate the Licensed Material is licensed under this 259 | Public License, and include the text of, or the URI or 260 | hyperlink to, this Public License. 261 | 262 | 2. You may satisfy the conditions in Section 3(a)(1) in any 263 | reasonable manner based on the medium, means, and context in 264 | which You Share the Licensed Material. For example, it may be 265 | reasonable to satisfy the conditions by providing a URI or 266 | hyperlink to a resource that includes the required 267 | information. 268 | 269 | 3. If requested by the Licensor, You must remove any of the 270 | information required by Section 3(a)(1)(A) to the extent 271 | reasonably practicable. 272 | 273 | b. ShareAlike. 274 | 275 | In addition to the conditions in Section 3(a), if You Share 276 | Adapted Material You produce, the following conditions also apply. 277 | 278 | 1. The Adapter's License You apply must be a Creative Commons 279 | license with the same License Elements, this version or 280 | later, or a BY-SA Compatible License. 281 | 282 | 2. You must include the text of, or the URI or hyperlink to, the 283 | Adapter's License You apply. You may satisfy this condition 284 | in any reasonable manner based on the medium, means, and 285 | context in which You Share Adapted Material. 286 | 287 | 3. You may not offer or impose any additional or different terms 288 | or conditions on, or apply any Effective Technological 289 | Measures to, Adapted Material that restrict exercise of the 290 | rights granted under the Adapter's License You apply. 291 | 292 | 293 | Section 4 -- Sui Generis Database Rights. 294 | 295 | Where the Licensed Rights include Sui Generis Database Rights that 296 | apply to Your use of the Licensed Material: 297 | 298 | a. for the avoidance of doubt, Section 2(a)(1) grants You the right 299 | to extract, reuse, reproduce, and Share all or a substantial 300 | portion of the contents of the database; 301 | 302 | b. if You include all or a substantial portion of the database 303 | contents in a database in which You have Sui Generis Database 304 | Rights, then the database in which You have Sui Generis Database 305 | Rights (but not its individual contents) is Adapted Material, 306 | 307 | including for purposes of Section 3(b); and 308 | c. You must comply with the conditions in Section 3(a) if You Share 309 | all or a substantial portion of the contents of the database. 310 | 311 | For the avoidance of doubt, this Section 4 supplements and does not 312 | replace Your obligations under this Public License where the Licensed 313 | Rights include other Copyright and Similar Rights. 314 | 315 | 316 | Section 5 -- Disclaimer of Warranties and Limitation of Liability. 317 | 318 | a. UNLESS OTHERWISE SEPARATELY UNDERTAKEN BY THE LICENSOR, TO THE 319 | EXTENT POSSIBLE, THE LICENSOR OFFERS THE LICENSED MATERIAL AS-IS 320 | AND AS-AVAILABLE, AND MAKES NO REPRESENTATIONS OR WARRANTIES OF 321 | ANY KIND CONCERNING THE LICENSED MATERIAL, WHETHER EXPRESS, 322 | IMPLIED, STATUTORY, OR OTHER. THIS INCLUDES, WITHOUT LIMITATION, 323 | WARRANTIES OF TITLE, MERCHANTABILITY, FITNESS FOR A PARTICULAR 324 | PURPOSE, NON-INFRINGEMENT, ABSENCE OF LATENT OR OTHER DEFECTS, 325 | ACCURACY, OR THE PRESENCE OR ABSENCE OF ERRORS, WHETHER OR NOT 326 | KNOWN OR DISCOVERABLE. WHERE DISCLAIMERS OF WARRANTIES ARE NOT 327 | ALLOWED IN FULL OR IN PART, THIS DISCLAIMER MAY NOT APPLY TO YOU. 328 | 329 | b. TO THE EXTENT POSSIBLE, IN NO EVENT WILL THE LICENSOR BE LIABLE 330 | TO YOU ON ANY LEGAL THEORY (INCLUDING, WITHOUT LIMITATION, 331 | NEGLIGENCE) OR OTHERWISE FOR ANY DIRECT, SPECIAL, INDIRECT, 332 | INCIDENTAL, CONSEQUENTIAL, PUNITIVE, EXEMPLARY, OR OTHER LOSSES, 333 | COSTS, EXPENSES, OR DAMAGES ARISING OUT OF THIS PUBLIC LICENSE OR 334 | USE OF THE LICENSED MATERIAL, EVEN IF THE LICENSOR HAS BEEN 335 | ADVISED OF THE POSSIBILITY OF SUCH LOSSES, COSTS, EXPENSES, OR 336 | DAMAGES. WHERE A LIMITATION OF LIABILITY IS NOT ALLOWED IN FULL OR 337 | IN PART, THIS LIMITATION MAY NOT APPLY TO YOU. 338 | 339 | c. The disclaimer of warranties and limitation of liability provided 340 | above shall be interpreted in a manner that, to the extent 341 | possible, most closely approximates an absolute disclaimer and 342 | waiver of all liability. 343 | 344 | 345 | Section 6 -- Term and Termination. 346 | 347 | a. This Public License applies for the term of the Copyright and 348 | Similar Rights licensed here. However, if You fail to comply with 349 | this Public License, then Your rights under this Public License 350 | terminate automatically. 351 | 352 | b. Where Your right to use the Licensed Material has terminated under 353 | Section 6(a), it reinstates: 354 | 355 | 1. automatically as of the date the violation is cured, provided 356 | it is cured within 30 days of Your discovery of the 357 | violation; or 358 | 359 | 2. upon express reinstatement by the Licensor. 360 | 361 | For the avoidance of doubt, this Section 6(b) does not affect any 362 | right the Licensor may have to seek remedies for Your violations 363 | of this Public License. 364 | 365 | c. For the avoidance of doubt, the Licensor may also offer the 366 | Licensed Material under separate terms or conditions or stop 367 | distributing the Licensed Material at any time; however, doing so 368 | will not terminate this Public License. 369 | 370 | d. Sections 1, 5, 6, 7, and 8 survive termination of this Public 371 | License. 372 | 373 | 374 | Section 7 -- Other Terms and Conditions. 375 | 376 | a. The Licensor shall not be bound by any additional or different 377 | terms or conditions communicated by You unless expressly agreed. 378 | 379 | b. Any arrangements, understandings, or agreements regarding the 380 | Licensed Material not stated herein are separate from and 381 | independent of the terms and conditions of this Public License. 382 | 383 | 384 | Section 8 -- Interpretation. 385 | 386 | a. For the avoidance of doubt, this Public License does not, and 387 | shall not be interpreted to, reduce, limit, restrict, or impose 388 | conditions on any use of the Licensed Material that could lawfully 389 | be made without permission under this Public License. 390 | 391 | b. To the extent possible, if any provision of this Public License is 392 | deemed unenforceable, it shall be automatically reformed to the 393 | minimum extent necessary to make it enforceable. If the provision 394 | cannot be reformed, it shall be severed from this Public License 395 | without affecting the enforceability of the remaining terms and 396 | conditions. 397 | 398 | c. No term or condition of this Public License will be waived and no 399 | failure to comply consented to unless expressly agreed to by the 400 | Licensor. 401 | 402 | d. Nothing in this Public License constitutes or may be interpreted 403 | as a limitation upon, or waiver of, any privileges and immunities 404 | that apply to the Licensor or You, including from the legal 405 | processes of any jurisdiction or authority. 406 | 407 | 408 | ======================================================================= 409 | 410 | Creative Commons is not a party to its public licenses. 411 | Notwithstanding, Creative Commons may elect to apply one of its public 412 | licenses to material it publishes and in those instances will be 413 | considered the “Licensor.” The text of the Creative Commons public 414 | licenses is dedicated to the public domain under the CC0 Public Domain 415 | Dedication. Except for the limited purpose of indicating that material 416 | is shared under a Creative Commons public license or as otherwise 417 | permitted by the Creative Commons policies published at 418 | creativecommons.org/policies, Creative Commons does not authorize the 419 | use of the trademark "Creative Commons" or any other trademark or logo 420 | of Creative Commons without its prior written consent including, 421 | without limitation, in connection with any unauthorized modifications 422 | to any of its public licenses or any other arrangements, 423 | understandings, or agreements concerning use of licensed material. For 424 | the avoidance of doubt, this paragraph does not form part of the public 425 | licenses. 426 | 427 | Creative Commons may be contacted at creativecommons.org. 428 | -------------------------------------------------------------------------------- /Makefile: -------------------------------------------------------------------------------- 1 | OBJ = public_html 2 | VENV = .venv 3 | PYTHON_INTERPRETER = python3 4 | YAJSV = bin/yajsv 5 | YAJSV_VERSION = 1.4.0 6 | YAJSV_DOWNLOAD_URL = https://github.com/neilpa/yajsv/releases/download/v$(YAJSV_VERSION) 7 | 8 | ifeq ($(VENV),.) 9 | PYTHON = $(PYTHON_INTERPRETER) 10 | else 11 | PYTHON = $(VENV)/bin/python 12 | endif 13 | LANGS = \ 14 | $(patsubst %.md,%,$(wildcard [a-z][a-z].md)) \ 15 | $(patsubst %.md,%,$(wildcard [a-z][a-z]-[A-Z][a-z][a-z][a-z].md)) 16 | LANG_HREFS = $(patsubst %:en/,%:./,$(foreach f,$(LANGS),$(f):$(f)/)) 17 | TABLES = $(wildcard tables/*.yaml) 18 | TEMPLATES = $(wildcard templates/*.html) 19 | OBJ_FILES = \ 20 | $(patsubst %,$(OBJ)/%,$(wildcard *.css)) \ 21 | $(patsubst %,$(OBJ)/%,$(wildcard *.js)) \ 22 | $(patsubst %,$(OBJ)/%,$(wildcard *.svg)) \ 23 | $(patsubst $(OBJ)/en/%,$(OBJ)/%,$(LANGS:%=$(OBJ)/%/index.html)) \ 24 | $(OBJ)/.nojekyll 25 | 26 | all: lint $(OBJ_FILES) 27 | 28 | clean: 29 | rm -rf $(OBJ_FILES) $(OBJ) $(YAJSV) 30 | rmdir $(dir $(YAJSV)) || true 31 | [ "$(VENV)" = "." ] || rm -rf $(VENV) 32 | 33 | lint: yaml-schema mypy yamllint 34 | 35 | validate-html5: $(VENV)/ $(OBJ_FILES) 36 | $(VENV)/bin/html5validator \ 37 | --root $(OBJ) \ 38 | --ignore '"latn" does not match the format for any permissible subtag' 39 | 40 | yaml-schema: $(YAJSV) table.schema.yaml $(TABLES) 41 | $(YAJSV) -s table.schema.yaml $(TABLES) 42 | 43 | yamllint: $(VENV)/ $(TABLES) .yamllint 44 | $(PYTHON) -m yamllint -c .yamllint --strict $(TABLES) 45 | 46 | mypy: $(VENV)/ build.py 47 | $(PYTHON) -m mypy build.py 48 | 49 | $(VENV)/: requirements.txt 50 | if [ "$(VENV)" != "." ]; then \ 51 | if [ ! -d $(VENV) ]; then \ 52 | if ! $(PYTHON_INTERPRETER) -m venv $(VENV); then \ 53 | virtualenv -p $(PYTHON_INTERPRETER) venv; \ 54 | curl https://bootstrap.pypa.io/get-pip.py -o get-pip.py; \ 55 | $(VENV)/bin/python get-pip.py; \ 56 | rm get-pip.py; \ 57 | fi; \ 58 | fi; \ 59 | $(VENV)/bin/python -m pip install -U pip setuptools wheel; \ 60 | $(VENV)/bin/pip install -U -r requirements.txt; \ 61 | echo "*" > $(VENV)/.gitignore; \ 62 | fi 63 | 64 | $(YAJSV): 65 | mkdir -p $(dir $(YAJSV)) 66 | { \ 67 | echo "#!$$(which sh)"; \ 68 | echo "echo 'yajsv was failed to be installed;' > /dev/stderr"; \ 69 | echo "echo 'lint was skipped...' > /dev/stderr"; \ 70 | } > $(YAJSV) 71 | GOOS="$$(uname -s | tr '[:upper:]' '[:lower:]')"; \ 72 | case "$$(uname -m)" in \ 73 | x86_64) \ 74 | GOARCH=amd64; \ 75 | ;; \ 76 | *) \ 77 | exit 0; \ 78 | ;; \ 79 | esac; \ 80 | download_url=$(YAJSV_DOWNLOAD_URL)/yajsv.$$GOOS.$$GOARCH; \ 81 | if command -v curl > /dev/null; then \ 82 | curl -L -o $(YAJSV) $$download_url || exit 0; \ 83 | else \ 84 | wget -O $(YAJSV) $$download_url || exit 0; \ 85 | fi 86 | chmod +x $(YAJSV) 87 | 88 | $(OBJ)/: 89 | mkdir -p $(OBJ) 90 | 91 | $(OBJ)/.nojekyll: $(OBJ)/ 92 | touch $(OBJ)/.nojekyll 93 | 94 | $(OBJ)/%.svg: %.svg | $(OBJ)/ 95 | cp $< $@ 96 | 97 | $(OBJ)/%.css: %.css | $(OBJ)/ 98 | cp $< $@ 99 | 100 | $(OBJ)/%.js: %.js | $(OBJ)/ 101 | cp $< $@ 102 | 103 | $(OBJ)/index.html: en.md $(VENV)/ build.py $(TABLES) $(TEMPLATES) | $(OBJ)/ 104 | $(PYTHON) build.py \ 105 | $(if $(URL_BASE),--base-href=$(URL_BASE),) \ 106 | $(LANG_HREFS:%=--lang=%$(if $(URL_BASE),,index.html)) en $< > $@ 107 | 108 | $(OBJ)/%/index.html: %.md $(VENV)/ build.py $(TABLES) $(TEMPLATES) | $(OBJ)/ 109 | mkdir -p $(dir $@) 110 | $(PYTHON) build.py \ 111 | --base-href=$(or $(URL_BASE),../) \ 112 | $(LANG_HREFS:%=--lang=%$(if $(URL_BASE),,index.html)) \ 113 | $(basename $(notdir $<)) \ 114 | $< \ 115 | > $@ 116 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | en.md -------------------------------------------------------------------------------- /build.py: -------------------------------------------------------------------------------- 1 | from __future__ import annotations 2 | 3 | import argparse 4 | import dataclasses 5 | import enum 6 | import functools 7 | import locale 8 | import os 9 | import os.path 10 | import sys 11 | import re 12 | from typing import ( 13 | AbstractSet, 14 | Callable, 15 | ClassVar, 16 | Dict, 17 | Iterable, 18 | Iterator, 19 | List, 20 | Mapping, 21 | NewType, 22 | Optional, 23 | Sequence, 24 | Set, 25 | Tuple, 26 | Type, 27 | Union, 28 | overload, 29 | ) 30 | import urllib.parse 31 | 32 | from babel.core import Locale, UnknownLocaleError # type: ignore 33 | from cached_property import cached_property # type: ignore 34 | from dragonmapper.hanzi import to_pinyin, to_zhuyin # type: ignore 35 | from dragonmapper.transcriptions import zhuyin_to_pinyin # type: ignore 36 | from hangul_romanize import Transliter # type: ignore 37 | from hangul_romanize.rule import academic # type: ignore 38 | from hanja import translate # type: ignore 39 | from jinja2.environment import Environment 40 | from jinja2.filters import pass_context 41 | from jinja2.loaders import FileSystemLoader 42 | from jinja2.utils import select_autoescape 43 | from lazy_import import lazy_module # type: ignore 44 | from lxml.html import document_fromstring # type: ignore 45 | from markdown import Markdown 46 | from markdown.extensions import Extension 47 | from markdown.extensions.toc import ( # type: ignore 48 | TocExtension, 49 | slugify_unicode 50 | ) 51 | from markdown.inlinepatterns import SimpleTextInlineProcessor # type: ignore 52 | from markupsafe import Markup 53 | from opencc import OpenCC # type: ignore 54 | from pykakasi import kakasi 55 | from yaml import load 56 | try: 57 | from yaml import CLoader as Loader 58 | except ImportError: 59 | from yaml import Loader # type: ignore 60 | 61 | 62 | pinyin_jyutping_sentence = lazy_module('pinyin_jyutping_sentence') 63 | 64 | 65 | LanguageTag = NewType('LanguageTag', str) 66 | 67 | 68 | class Spacing(enum.Enum): 69 | space = 'space' 70 | no_space = 'no_space' 71 | hyphen = 'hyphen' 72 | implicit_space = 'implicit_space' 73 | implicit_no_space = 'implicit_no_space' 74 | 75 | def __bool__(self) -> bool: 76 | cls: Type[Spacing] = type(self) 77 | return self is cls.space or self is cls.implicit_space 78 | 79 | def __str__(self) -> str: 80 | cls: Type[Spacing] = type(self) 81 | if self is cls.hyphen: 82 | return '-' 83 | return ' ' if self else '' 84 | 85 | 86 | @dataclasses.dataclass(frozen=True) 87 | class Term: 88 | term: str 89 | space: Spacing 90 | correspond: str 91 | 92 | def romanize(self, locale: Locale) -> Tuple[LanguageTag, Markup]: 93 | return romanize(self.term, locale) 94 | 95 | def normalize(self, locale: Locale) -> str: 96 | return self.term 97 | 98 | 99 | kks = kakasi() 100 | 101 | 102 | @dataclasses.dataclass(frozen=True) 103 | class EasternTerm(Term): 104 | read: str 105 | 106 | def romanize(self, locale: Locale) -> Tuple[LanguageTag, Markup]: 107 | return romanize(self.read, locale) 108 | 109 | normalizers: ClassVar[Mapping[Locale, OpenCC]] = { 110 | Locale.parse('ja'): OpenCC('jp2t'), 111 | Locale.parse('zh_CN'): OpenCC('s2t'), 112 | # Locale.parse('zh_HK'): OpenCC('hk2t'), 113 | # Locale.parse('zh_TW'): OpenCC('tw2t'), 114 | } 115 | 116 | readers: ClassVar[ 117 | Mapping[ 118 | Locale, 119 | Callable[ 120 | [str, str, Sequence[str]], 121 | Iterable[Tuple[str, Union[str, Markup]]] 122 | ] 123 | ] 124 | ] = { 125 | Locale.parse('ja'): lambda t, n, _: ( 126 | (t[sum(len(x['orig']) for x in r[:i]):][:len(e['orig'])], e['hira']) 127 | for r in [kks.convert(n)] 128 | for i, e in enumerate(r) 129 | ), 130 | Locale.parse('ko'): lambda t, n, p: 131 | zip( 132 | t, 133 | # To prevent a non-spaced term from the "initial sound law" 134 | # (which is adopted by South Korean orthography; 135 | # ), 136 | # prepend previous terms to the input, and strip them 137 | # from the output: 138 | translate(''.join(p) + n, 'substitution')[sum(map(len, p)):] 139 | ), 140 | Locale.parse('zh_CN'): lambda t, n, _: 141 | zip(t, pinyin_jyutping_sentence.pinyin(n, False, True).split()), 142 | Locale.parse('zh_HK'): lambda t, n, _: 143 | zip(t, pinyin_jyutping_sentence.jyutping(n, True, True).split()), 144 | Locale.parse('zh_TW'): lambda t, n, _: 145 | zip(t, pinyin_jyutping_sentence.pinyin(n, False, True).split()), 146 | } 147 | 148 | def normalize(self, locale: Locale) -> str: 149 | try: 150 | normalizer = self.normalizers[locale] 151 | except KeyError: 152 | return self.term 153 | else: 154 | return normalizer.convert(self.term) 155 | 156 | def read_as(self, 157 | from_: Locale, 158 | to: Locale, 159 | previous_terms: Sequence[Term], 160 | word_id: str, 161 | translation: Translation, 162 | table: Table) -> Iterable[Tuple[str, Union[str, Markup]]]: 163 | if from_ == to: 164 | return zip(self.term, self.read.split()) 165 | same_cls = type(self) 166 | target_words: Sequence[Word] = translation.get(to, []) 167 | for target_word in target_words: 168 | if target_word.id == word_id: 169 | for target_term in target_word: 170 | if target_term.correspond == self.correspond and \ 171 | isinstance(target_term, same_cls): 172 | return zip(self.term, target_term.read.split()) 173 | terms_table: Mapping[str, Term] = table.terms_table.get(to, {}) 174 | term_id = self.normalize(from_) 175 | correspond = terms_table.get(term_id) 176 | if isinstance(correspond, same_cls): 177 | return zip(self.term, correspond.read.split()) 178 | reader = self.readers.get(to) 179 | term = self.normalize(from_) 180 | if callable(reader): 181 | previous = [t.normalize(from_) for t in previous_terms] 182 | return reader(self.term, term, previous) 183 | return self.read_as( 184 | from_, 185 | from_, 186 | previous_terms, 187 | word_id, 188 | translation, 189 | table 190 | ) 191 | 192 | 193 | @dataclasses.dataclass(frozen=True) 194 | class WesternTerm(Term): 195 | loan: str 196 | read: Optional[str] 197 | locale: Locale 198 | 199 | def romanize(self, locale: Locale) -> Tuple[LanguageTag, Markup]: 200 | if self.read is not None: 201 | return romanize(self.read, locale) 202 | l, r = super().romanize(locale) 203 | return l, Markup(r.capitalize()) if self.loan[0].isupper() else r 204 | 205 | hangul_romanize_transliter = Transliter(academic) 206 | 207 | Romanizer = Tuple[LanguageTag, Callable[[str], Markup]] 208 | 209 | romanizers: Mapping[Locale, Romanizer] = { 210 | Locale.parse('ja'): ( 211 | LanguageTag('ja-Latn-hepburn'), 212 | lambda t: Markup(kks.convert(t.replace(' ', ''))[0]['hepburn']), 213 | ), 214 | Locale.parse('ko'): ( 215 | LanguageTag('ko-Latn-t-m0-mcst'), # See also: RFC 6497 216 | lambda t: 217 | Markup(hangul_romanize_transliter.translit(t.replace(' ', ''))), 218 | ), 219 | Locale.parse('zh_CN'): ( 220 | LanguageTag('zh-CN-Latn-pny'), 221 | lambda t: Markup(to_pinyin(t).replace(' ', '')), 222 | ), 223 | Locale.parse('zh_HK'): ( 224 | LanguageTag('yue-HK-Latn-jyutping'), 225 | lambda t: Markup( 226 | re.sub( 227 | r'(\d) ?', 228 | r'\1', 229 | t if re.match(r'^[A-Za-z0-9 ]+$', t) 230 | else pinyin_jyutping_sentence.jyutping(t, True, True) 231 | ) 232 | ), 233 | ), 234 | Locale.parse('zh_TW'): ( 235 | LanguageTag('zh-TW-Latn-pny'), 236 | lambda t: Markup(zhuyin_to_pinyin(to_zhuyin(t)).replace(' ', '')), 237 | ), 238 | } 239 | 240 | 241 | def romanize(term: str, locale: Locale) -> Tuple[LanguageTag, Markup]: 242 | global romanizers 243 | try: 244 | l, f = romanizers[locale] 245 | except KeyError: 246 | l = LanguageTag(f'{locale.language}-Latn') 247 | return l, Markup(term.replace(' ', '')) 248 | return l, f(term) 249 | 250 | 251 | class Word(Sequence[Term]): 252 | def __init__(self, id: str, locale: Locale, terms: Iterable[Term]): 253 | self.id = id 254 | self.locale = locale 255 | self.terms = list(terms) 256 | 257 | def __iter__(self) -> Iterator[Term]: 258 | return iter(self.terms) 259 | 260 | def __len__(self) -> int: 261 | return len(self.terms) 262 | 263 | def romanize(self) -> Tuple[LanguageTag, str]: 264 | global romanizers 265 | l, _ = romanizers[self.locale] 266 | return l, Markup('').join( # type: ignore 267 | Markup('' if term.space is Spacing.no_space else ' ') + 268 | term.romanize(self.locale)[1] 269 | for term in self 270 | ).strip() 271 | 272 | def get_previous_terms(self, term: Term) -> Sequence[Term]: 273 | prev_terms: List[Term] = [] 274 | for t in self: 275 | if t.space: 276 | prev_terms.clear() 277 | if term == t: 278 | return prev_terms 279 | prev_terms.append(t) 280 | raise ValueError('failed to find ' + repr(term)) 281 | 282 | @overload 283 | def __getitem__(self, index: int) -> Term: ... 284 | 285 | @overload 286 | def __getitem__(self, index: slice) -> Sequence[Term]: ... 287 | 288 | def __getitem__(self, i: Union[int, slice]) -> Union[Term, Sequence[Term]]: 289 | return self.terms[i] 290 | 291 | def __repr__(self) -> str: 292 | cls = type(self) 293 | return f'{cls.__qualname__}.{cls.__name__}({self.id!r}, {self.terms!r})' 294 | 295 | 296 | class Translation(Mapping[Locale, Sequence[Word]]): 297 | def __init__(self, translation: Iterable[Tuple[Locale, Sequence[Word]]]): 298 | self.translation: Mapping[Locale, Sequence[Word]] = dict(translation) 299 | 300 | def __iter__(self) -> Iterator[Locale]: 301 | return iter(self.translation) 302 | 303 | def __len__(self) -> int: 304 | return len(self.translation) 305 | 306 | def __getitem__(self, key: Locale) -> Sequence[Word]: 307 | return self.translation[key] 308 | 309 | @cached_property 310 | def max_words(self) -> int: 311 | return max(len(ws) for ws in self.translation.values()) 312 | 313 | @cached_property 314 | def cognate_groups(self) -> Mapping[str, Mapping[Locale, Word]]: 315 | cognate_groups: Dict[str, Dict[Locale, Word]] = {} 316 | for locale, words in self.translation.items(): 317 | for word in words: 318 | cognate_groups.setdefault(word.id, {})[locale] = word 319 | for word_id in list(cognate_groups): 320 | if len(cognate_groups[word_id]) < 2: 321 | del cognate_groups[word_id] 322 | return cognate_groups 323 | 324 | @cached_property 325 | def correspondences(self) -> Sequence[str]: 326 | count_map: Dict[str, int] = {} 327 | for words in self.values(): 328 | for word in words: 329 | for term in word: 330 | count_map[term.correspond] = \ 331 | count_map.get(term.correspond, 0) + 1 332 | counts: List[Tuple[str, int]] = list(count_map.items()) 333 | counts.sort(key=lambda pair: pair[1], reverse=True) 334 | return [k for k, v in counts if v > 1] 335 | 336 | 337 | class Table(Sequence[Translation]): 338 | def __init__(self, translations: Iterable[Translation]): 339 | self.translations = list(translations) 340 | 341 | @cached_property 342 | def supported_locales(self) -> AbstractSet[Locale]: 343 | return frozenset(locale for tr in self for locale in tr) 344 | 345 | @cached_property 346 | def terms_table(self) -> Mapping[Locale, Mapping[str, Term]]: 347 | table: Dict[Locale, Dict[str, Term]] = {} 348 | for translation in self: 349 | for locale, words in translation.items(): 350 | terms: Dict[str, Term] = table.setdefault(locale, {}) 351 | for word in words: 352 | for term in word: 353 | terms[term.normalize(locale)] = term 354 | return table 355 | 356 | def __iter__(self) -> Iterator[Translation]: 357 | return iter(self.translations) 358 | 359 | def __len__(self) -> int: 360 | return len(self.translations) 361 | 362 | @overload 363 | def __getitem__(self, index: int) -> Translation: ... 364 | 365 | @overload 366 | def __getitem__(self, index: slice) -> Sequence[Translation]: ... 367 | 368 | def __getitem__(self, i: Union[int, slice]) -> Union[ 369 | Translation, Sequence[Translation]]: 370 | return self.translations[i] 371 | 372 | def __repr__(self) -> str: 373 | cls = type(self) 374 | return f'{cls.__qualname__}.{cls.__name__}({self.translations!r})' 375 | 376 | 377 | spaceless_languages: AbstractSet[str] = {'ja', 'zh'} 378 | 379 | 380 | def load_table(path: Union[str, os.PathLike]) -> Table: 381 | with open(os.fspath(path)) as f: 382 | data = load(f, Loader=Loader) 383 | table: List[Translation] = [] 384 | assert isinstance(data, Sequence) 385 | for tr_row in data: 386 | assert isinstance(tr_row, Mapping) 387 | translation: List[Tuple[Locale, Sequence[Word]]] = [] 388 | for lang, ws in tr_row.items(): 389 | assert isinstance(lang, str) 390 | locale = Locale.parse(lang.replace('-', '_')) 391 | implicit_spacing = \ 392 | Spacing.implicit_no_space \ 393 | if locale.language in spaceless_languages \ 394 | else Spacing.implicit_space 395 | assert isinstance(ws, Mapping) 396 | words: List[Word] = [] 397 | for wid, term_rows in ws.items(): 398 | assert isinstance(wid, str) 399 | assert isinstance(term_rows, Sequence) 400 | terms: List[Term] = [] 401 | for term_row in term_rows: 402 | assert isinstance(term_row, Mapping) 403 | t = term_row['term'] 404 | try: 405 | if term_row['space'] == 'hyphen': 406 | spacing = Spacing.hyphen 407 | else: 408 | spacing = \ 409 | Spacing.space \ 410 | if term_row['space'] \ 411 | else Spacing.no_space 412 | except KeyError: 413 | spacing = implicit_spacing 414 | term: Term 415 | if 'loan' in term_row: 416 | term = WesternTerm( 417 | t, 418 | spacing, 419 | term_row.get('correspond', term_row['loan']), 420 | term_row['loan'], 421 | term_row.get('read', None), 422 | term_row.get('language', Locale.parse('en')) 423 | ) 424 | elif 'read' in term_row: 425 | term = EasternTerm( 426 | t, 427 | spacing, 428 | term_row.get('correspond', t), 429 | term_row['read'] 430 | ) 431 | else: 432 | term = Term(t, spacing, term_row.get('correspond', t)) 433 | terms.append(term) 434 | word = Word(wid, locale, terms) 435 | words.append(word) 436 | translation.append((locale, words)) 437 | table.append(Translation(translation)) 438 | return Table(table) 439 | 440 | 441 | territory_names: Mapping[Tuple[str, Locale], str] = { 442 | # "Hong Kong SAR China" is too long to show in a narrow column: 443 | ('HK', Locale.parse('en')): 'Hong Kong', 444 | ('HK', Locale.parse('ja')): '香港', 445 | ('HK', Locale.parse('ko')): '홍콩', 446 | ('HK', Locale.parse('zh_CN')): '香港', 447 | ('HK', Locale.parse('zh_Hans')): '香港', 448 | ('HK', Locale.parse('zh_Hant')): '香港', 449 | ('HK', Locale.parse('zh_HK')): '香港', 450 | ('HK', Locale.parse('zh_TW')): '香港', 451 | } 452 | 453 | def get_territory_name(territory: Union[Locale, str], language: Locale) -> str: 454 | if isinstance(territory, Locale): 455 | if territory.territory is None: 456 | raise ValueError('territory is not specified') 457 | territory = territory.territory 458 | return territory_names.get( 459 | (territory, language), 460 | language.territories[territory] 461 | ) 462 | 463 | 464 | template_loader = FileSystemLoader( 465 | os.path.join(os.path.dirname(__file__), 'templates') 466 | ) 467 | template_env = Environment( 468 | loader=template_loader, 469 | autoescape=select_autoescape(['html']), 470 | extensions=['jinja2.ext.do'], 471 | ) 472 | template_env.filters.update( 473 | dictselect=pass_context( 474 | lambda ctx, dict, test=None, *args, **kwargs: { 475 | k: v 476 | for k, v in dict.items() 477 | if (ctx.environment.call_test(test, v, *args, **kwargs) if test else v) 478 | } 479 | ), 480 | territory_name=get_territory_name, 481 | zip=zip, 482 | ) 483 | table_template = template_env.get_template('table.html') 484 | 485 | 486 | def render_table( 487 | locale: Locale, 488 | table: Table, 489 | source: Optional[str] = None, 490 | ) -> str: 491 | def get_territory(locale: Locale) -> str: 492 | if locale.territory is None: 493 | raise ValueError('territory is not specified') 494 | return locale.territory 495 | 496 | supported_locale_map: Mapping[str, AbstractSet[Locale]] = { 497 | locale.language: { 498 | l for l in table.supported_locales 499 | if l.language == locale.language 500 | } 501 | for locale in table.supported_locales 502 | } 503 | locales: Mapping[str, Union[Locale, Mapping[str, Locale]]] = { 504 | l: next(iter(ls)) if len(ls) == 1 else { 505 | '_': Locale(l), 506 | **{ 507 | get_territory(l): l 508 | for l in sorted( 509 | ls, 510 | key=lambda l: ( 511 | l != locale, 512 | l.territory != locale.territory, 513 | get_territory_name(l, locale), 514 | ) 515 | ) 516 | } 517 | } 518 | for l, ls in sorted( 519 | supported_locale_map.items(), 520 | key=lambda pair: ( 521 | pair[0] != 'en', 522 | pair[0] != locale.language, 523 | Locale(pair[0]).get_display_name(locale), 524 | ) 525 | ) 526 | } 527 | return table_template.render( 528 | locale=locale, 529 | locales=locales, 530 | table=table, 531 | source=source, 532 | ) 533 | 534 | 535 | class IgnoreLineFeedExtension(Extension): 536 | def extendMarkdown(self, md): 537 | md.inlinePatterns.register( 538 | SimpleTextInlineProcessor(r'()\n+'), 539 | 'linefeed', 540 | 40 541 | ) 542 | 543 | 544 | def render_doc(path: Union[str, os.PathLike], locale: Locale) -> str: 545 | extensions: Set[Union[str, Extension]] = { 546 | 'abbr', 547 | 'def_list', 548 | 'footnotes', 549 | 'sane_lists', 550 | 'tables', 551 | TocExtension(slugify=slugify_unicode), 552 | } 553 | if locale.language in ('ja', 'zh'): 554 | extensions.add(IgnoreLineFeedExtension()) 555 | else: 556 | extensions.add('smarty') 557 | md = Markdown( 558 | output_format='html', 559 | extensions=list(extensions), 560 | ) 561 | with open(os.fspath(path)) as f: 562 | text: str = f.read() 563 | text = re.sub( 564 | r'(.*?)', 565 | '', 566 | text, 567 | 0, 568 | re.DOTALL 569 | ) 570 | html: str = md.convert(text) 571 | toc: str = getattr(md, "toc") 572 | html = re.sub( 573 | r'', 574 | lambda m: f'

{m.group(1)}

{toc}
', 575 | html 576 | ) 577 | html = re.sub( 578 | r'

\n]+?\.ya?ml)">.*?

', 579 | lambda m: render_table(locale, load_table(m.group(1)), m.group(1)), 580 | html 581 | ) 582 | return html 583 | 584 | 585 | page_template = template_env.get_template('layout.html') 586 | 587 | 588 | def render_page( 589 | doc_path: Union[str, os.PathLike], 590 | locale: Locale, 591 | base_href: Optional[str] = None, 592 | lang_hrefs: Optional[Mapping[Locale, str]] = None, 593 | ) -> str: 594 | doc = render_doc(doc_path, locale) 595 | title = document_fromstring( 596 | f'{doc}' 597 | ).xpath('/html/body/h1')[0].text_content() 598 | absolute_base = base_href and base_href.startswith(('http:', 'https:')) 599 | lang_href_pairs: List[Tuple[Locale, str]] = [ 600 | (l, urllib.parse.urljoin(base_href, h) 601 | if base_href is not None and absolute_base 602 | else h) 603 | for l, h in ([] if lang_hrefs is None else lang_hrefs.items()) 604 | ] 605 | lang_href_pairs.sort(key=lambda pair: str(pair[0])) 606 | rebase_url: Callable[[str], str] 607 | if not base_href: 608 | rebase_url = lambda url: url 609 | elif absolute_base: 610 | rebase_url = lambda url: urllib.parse.urljoin(base_href or '', url) 611 | else: 612 | ends_with_slash = base_href and base_href.endswith("/") 613 | rebase_url = lambda url: \ 614 | (base_href or '') + ("" if ends_with_slash else "/") + url 615 | return page_template.render( 616 | locale=locale, 617 | doc=Markup(doc), 618 | title=title, 619 | base_href=base_href, 620 | rebase_url=rebase_url, 621 | lang_hrefs=lang_href_pairs, 622 | ) 623 | 624 | 625 | def main() -> None: 626 | def parse_locale(locale: str) -> Locale: 627 | try: 628 | return Locale.parse(locale.replace('-', '_')) 629 | except UnknownLocaleError as e: 630 | raise ValueError(str(e)) from e 631 | def parse_lang_href(pair: str) -> Tuple[Locale, str]: 632 | locale, href = pair.split(':', 1) 633 | return parse_locale(locale), href 634 | parser = argparse.ArgumentParser() 635 | parser.add_argument('locale', metavar='LANG', type=parse_locale) 636 | parser.add_argument('file') 637 | parser.add_argument('--base-href') 638 | parser.add_argument( 639 | '-l', '--lang', 640 | metavar='LANG:HREF', 641 | action='append', 642 | type=parse_lang_href, 643 | dest='lang_hrefs', 644 | ) 645 | args = parser.parse_args() 646 | if not os.path.isfile(args.file): 647 | parser.error(f'no such file: {args.file}') 648 | return 649 | lang_hrefs: Dict[Locale, str] = dict(args.lang_hrefs) 650 | print(render_page(args.file, args.locale, args.base_href, lang_hrefs)) 651 | 652 | 653 | if __name__ == '__main__': 654 | main() 655 | -------------------------------------------------------------------------------- /cc-by-sa.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | -------------------------------------------------------------------------------- /en.md: -------------------------------------------------------------------------------- 1 | CJK computer science terms comparison 2 | ===================================== 3 | 4 | [![GitHub](https://img.shields.io/github/stars/dahlia/cjk-compsci-terms?style=social)][GitHub] 5 | [![Netlify](https://api.netlify.com/api/v1/badges/2ae1a16c-e345-4863-90c0-080e520855a5/deploy-status)][Netlify] 6 | [![Creative Commons License](cc-by-sa.svg)][CC BY-SA 4.0] 7 | [![GitHub Sponsors](https://img.shields.io/github/sponsors/dahlia?logo=github)][GitHub Sponsors] 8 | 9 | 10 | *This repository contains the **source code** of the website. 11 | You can see the website from the following link:* 12 | 13 | - [English](https://cjk-compsci-terms.netlify.app/) 14 | - [中文 (繁體)](https://cjk-compsci-terms.netlify.app/zh-Hant/) 15 | - [日本語](https://cjk-compsci-terms.netlify.app/ja/) 16 | - [한국어](https://cjk-compsci-terms.netlify.app/ko/) 17 | 18 | 19 | Greater China, Japan, and Korea, the so-called [Sinosphere] 20 | (漢字文化圈; 21 | literally: "Chinese character cultural sphere"), 22 | have borrowed many concepts through Sinoxenic vocabularies from the West 23 | since the modern era. Some of them have their own translations, 24 | but some have imported translations from neighboring countries. 25 | In some translations, both native and foreign stems are combined. 26 | As a result, Sinosphere countries share a lot of words, 27 | but to some extent they have their own parts. 28 | And this is no different in computer science translations. 29 | 30 | This page contains comparison tables of how computer science terms, 31 | mostly derived from English, are translated and called in 32 | different regions of Sinosphere. 33 | 34 | This work is licensed under a [Creative Commons Attribution-ShareAlike 4.0 35 | International License][CC BY-SA 4.0]. 36 | 37 | [Sinosphere]: https://en.wikipedia.org/wiki/Sinosphere 38 | [GitHub]: https://github.com/dahlia/cjk-compsci-terms 39 | [Netlify]: https://app.netlify.com/sites/cjk-compsci-terms/deploys 40 | [CC BY-SA 4.0]: https://creativecommons.org/licenses/by-sa/4.0/ 41 | [GitHub Sponsors]: https://github.com/sponsors/dahlia 42 | 43 | 44 | 45 | 46 | 47 | Introduction 48 | ------------ 49 | 50 | ### Cognates 51 | 52 | Cognates are words that are derived from one side or share a common 53 | etymology. 54 | 55 | For example, the English word computer and the Korean word 56 | 컴퓨터 (keompyuteo), the Japanese word 57 | 計算科学 (keisan kagaku) and the Chinese word 58 | 計算科學 (jìsuàn kēxué), that 59 | are both meaning computational science, are cognates. 60 | 61 | Cognates are indicated by the same colored border. 62 | 63 | ### Calque (loan translation) 64 | 65 | Calque is a word or phrase borrowed from another language by literal 66 | word-for-word or root-for-root translation. 67 | 68 | For example, the Chinese word 軟件 (ruǎnjiàn) is a translation 69 | of the English word software, which translates the English words 70 | soft (ruǎn; *soft* or *flexible*) and ware → 71 | (jiàn; *clothes* or *item*) respectively. 72 | 73 | Matching words/roots between languages in this way are underlined 74 | with the same color & shape. 75 | 76 | ### Homophonic translations 77 | 78 | For a root transcribed from a foreign word, 79 | the original word is displayed on the root. 80 | 81 | For example, as the Japanese word コンピュータ (konpyu-ta) 82 | is a transcription of English word computer, it is displayed like: 83 | コンピュータcomputer. 84 | 85 | ### Romanized pronunciation 86 | 87 | The pronunciation of each word is shown in Latin letters in parentheses 88 | below the word. The transcription system for each language is as follows: 89 | 90 | Mandarin (China & Taiwan) 91 | : [Hanyu Pinyin] 92 | 93 | Cantonese (Hong Kong) 94 | : [Jyutping] (Linguistic Society of Hong Kong Cantonese Romanization Scheme) 95 | 96 | Japanese 97 | : [Hepburn romanization] 98 | 99 | Korean 100 | : [Revised Romanization of Korean][RR] (academic transcription for 101 | recovering morphophonemic elements[^1]) 102 | 103 | [^1]: Romanization of Korean. 104 | National Institute of Korean Language. 105 | [§ 3.8][Romanization of Korean § 3.8] (Korean). 106 | 107 | [Hanyu Pinyin]: https://en.wikipedia.org/wiki/Pinyin 108 | [Jyutping]: https://en.wikipedia.org/wiki/Jyutping 109 | [Hepburn romanization]: https://en.wikipedia.org/wiki/Hepburn_romanization 110 | [RR]: https://korean.go.kr/front_eng/roman/roman_01.do 111 | [Romanization of Korean § 3.8]: https://kornorms.korean.go.kr/regltn/regltnView.do?regltn_code=0004 112 | 113 | 114 | Basic terms 115 | ----------- 116 | 117 | [Show table](tables/basic.yaml) 118 | 119 | 120 | Units 121 | ----- 122 | 123 | [Show table](tables/units.yaml) 124 | 125 | 126 | Fields of study 127 | --------------- 128 | 129 | [Show table](tables/studies.yaml) 130 | 131 | 132 | Computer programming 133 | -------------------- 134 | 135 | [Show table](tables/programming.yaml) 136 | 137 | 138 | Tools 139 | ----- 140 | 141 | [Show table](tables/tools.yaml) 142 | 143 | 144 | Theory of computation 145 | --------------------- 146 | 147 | [Show table](tables/theory-comp.yaml) 148 | 149 | 150 | Programming paradigms 151 | --------------------- 152 | 153 | [Show table](tables/paradigms.yaml) 154 | 155 | 156 | Concurrent programming 157 | ---------------------- 158 | 159 | [Show table](tables/concurrency.yaml) 160 | 161 | 162 | F/OSS 163 | ----- 164 | 165 | [Show table](tables/foss.yaml) 166 | 167 | 168 | *[CJK]: Chinese, Japanese, and Korean languages 169 | *[F/OSS]: Free and open-source software 170 | -------------------------------------------------------------------------------- /hooks/pre-commit: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | make lint 3 | -------------------------------------------------------------------------------- /ja.md: -------------------------------------------------------------------------------- 1 | 日中韓のコンピュータ科学の用語対照 2 | ================================== 3 | 4 | [![GitHub](https://img.shields.io/github/stars/dahlia/cjk-compsci-terms?style=social)][GitHub] 5 | [![Netlify](https://api.netlify.com/api/v1/badges/2ae1a16c-e345-4863-90c0-080e520855a5/deploy-status)][Netlify] 6 | [![クリエイティブ・コモンズ・ライセンス](cc-by-sa.svg)][CC BY-SA 4.0] 7 | [![GitHub Sponsors](https://img.shields.io/github/sponsors/dahlia?logo=github)][GitHub Sponsors] 8 | 9 | 日本·中華圏·韓国はいわゆる[漢字文化圏]と呼ばれ、 10 | 近代以降の西洋の様々な概念を漢字の造語力を利用して翻訳·借用しました。 11 | その中では国ごとに独自の訳語を作った場合もありますが、 12 | 隣国の訳語を輸入した場合もあります。 13 | 隣国から輸入した語根と自国の固有語を合わせて翻訳借用語を作る場合もあります。 14 | その結果、漢字文化圏の国々は多くの言葉を共有しながらも、 15 | ある程度それぞれ固有の部分を持つようになりました。 16 | そしてこれはコンピュータ科学の用語でも同じです。 17 | 18 | このページは主に英語が原語であるコンピューター科学の様々な用語を、 19 | 漢字文化圏の国々でどのように訳しているのかを比較した対照表を載せています。 20 | 21 | この作品は[クリエイティブ・コモンズ表示-継承4.0国際ライセンス][CC BY-SA 4.0] 22 | の下に提供されています。 23 | 24 | [漢字文化圏]: https://ja.wikipedia.org/wiki/%E6%BC%A2%E5%AD%97%E6%96%87%E5%8C%96%E5%9C%8F 25 | [GitHub]: https://github.com/dahlia/cjk-compsci-terms 26 | [Netlify]: https://app.netlify.com/sites/cjk-compsci-terms/deploys 27 | [CC BY-SA 4.0]: https://creativecommons.org/licenses/by-sa/4.0/ 28 | [GitHub Sponsors]: https://github.com/sponsors/dahlia 29 | 30 | 31 | 32 | 33 | 34 | 例言 35 | ---- 36 | 37 | ### 同根語 (cognate) 38 | 39 | 同根語とは、共通の起源を持つ単語を意味します。 40 | 41 | 例えば、英語computerと日本語コンピュータ、 42 | 日本語情報と韓国語チョン 43 | (情報)は同根語です。 44 | 45 | 同根語は、同じ色の枠で表示されます。 46 | 47 | ### 翻訳借用 (calque) 48 | 49 | 翻訳借用とは、或る言語が他の言語から語を借用する時、 50 | 借用元の語の意味をなぞり、翻訳して取り入れる事を指します。 51 | 52 | 例えば、英語のartificial intelligence 53 | の訳語人工知能は、英語の語根のartificial人工 54 | とintelligence知能をそれぞれ翻訳して借用しました。 55 | 56 | この様に、言語間で対応する語根は、同じ色と形の下線で表示されます。 57 | 58 | ### 漢字 59 | 60 | 語根が漢字である場合は、日本語読みの振り仮名を付きます。 61 | 62 | 例えば、中国語の単語のウェン 63 | 题ティーは、日本語の単語の問題と 64 | 同根語であることを分かりやすくする為、中国語読みのウェンティー 65 | ではなく日本語読みのもんだいの振り仮名を付きます: 66 | もんだい。 67 | 68 | ### 音訳 69 | 70 | 語根が外国語を音訳した場合、原文のルビを付きます。 71 | 72 | 例えば、中国語の圖靈は、英国の数学者であるアラン・ 73 | チューリング(Alan Turing)の音訳ですが、 74 | 日本語読みをせず原文のTuringのルビを付きます: 75 | 圖靈Turing. 76 | 77 | ### 原音のローマ字表記 78 | 79 | 単語の原音は、単語の下の括弧内にローマ字で表記されます。 80 | 言語別転写規則は、次のとおりです。 81 | 82 | 日本語 83 | : [ヘボン式ローマ字] 84 | 85 | 標準中国語 (中国と台湾) 86 | : [漢語拼音] 87 | 88 | 広東語 (香港) 89 | : [香港語言学学会粤語拼音方案][粤拼] 90 | 91 | 韓国語 92 | : [文化観光部2000年式] (形態音素の復原を前提とした学術表記[^1]) 93 | 94 | [^1]: 国立国語院 [「国語のローマ字表記法」第3章第8項][](韓国語)。 95 | 96 | [ヘボン式ローマ字]: https://ja.wikipedia.org/wiki/%E3%83%98%E3%83%9C%E3%83%B3%E5%BC%8F%E3%83%AD%E3%83%BC%E3%83%9E%E5%AD%97 97 | [漢語拼音]: https://ja.wikipedia.org/wiki/%E6%8B%BC%E9%9F%B3 98 | [粤拼]: https://ja.wikipedia.org/wiki/%E9%A6%99%E6%B8%AF%E8%AA%9E%E8%A8%80%E5%AD%A6%E5%AD%A6%E4%BC%9A%E7%B2%A4%E8%AA%9E%E6%8B%BC%E9%9F%B3%E6%96%B9%E6%A1%88 99 | [文化観光部2000年式]: https://ja.wikipedia.org/wiki/%E6%96%87%E5%8C%96%E8%A6%B3%E5%85%89%E9%83%A82000%E5%B9%B4%E5%BC%8F 100 | [「国語のローマ字表記法」第3章第8項]: https://kornorms.korean.go.kr/regltn/regltnView.do?regltn_code=0004#a489 101 | 102 | 103 | 基本用語 104 | -------- 105 | 106 | [表示](tables/basic.yaml) 107 | 108 | 109 | 単位 110 | ---- 111 | 112 | [表示](tables/units.yaml) 113 | 114 | 115 | 研究分野 116 | -------- 117 | 118 | [表示](tables/studies.yaml) 119 | 120 | 121 | プログラミング 122 | -------------- 123 | 124 | [表示](tables/programming.yaml) 125 | 126 | 127 | 道具 128 | ---- 129 | 130 | [表示](tables/tools.yaml) 131 | 132 | 133 | 計算理論 134 | -------- 135 | 136 | [表示](tables/theory-comp.yaml) 137 | 138 | 139 | プログラミングパラダイム 140 | ------------------------ 141 | 142 | [表示](tables/paradigms.yaml) 143 | 144 | 145 | 並行計算 146 | ------- 147 | 148 | [表示](tables/concurrency.yaml) 149 | 150 | 151 | 自由ソフトウェアとオープンソース 152 | -------------------------------- 153 | 154 | [表示](tables/foss.yaml) 155 | -------------------------------------------------------------------------------- /ko.md: -------------------------------------------------------------------------------- 1 | 한·중·일 전산학 용어 대조 2 | ========================= 3 | 4 | [![GitHub](https://img.shields.io/github/stars/dahlia/cjk-compsci-terms?style=social)][GitHub] 5 | [![Netlify](https://api.netlify.com/api/v1/badges/2ae1a16c-e345-4863-90c0-080e520855a5/deploy-status)][Netlify] 6 | [![크리에이티브 커먼즈 라이선스](cc-by-sa.svg)][CC BY-SA 4.0] 7 | [![GitHub Sponsors](https://img.shields.io/github/sponsors/dahlia?logo=github)][GitHub Sponsors] 8 | 9 | 한국·일본·중화권은 이른바 [한자문화권]으로 불리며, 10 | 근대 이후 서양의 여러 개념을 한자의 조어력을 이용해 번역차용했습니다. 11 | 그 중에서는 각자 다른 번역어를 만든 것도 있지만, 12 | 옆 나라의 번역어를 수입한 경우도 있습니다. 13 | 옆 나라에서 수입한 어근과 자국의 고유어를 합쳐서 번역차용어를 14 | 만드는 경우도 있습니다. 15 | 그 결과, 한자문화권의 나라들은 많은 말을 공유하면서도 어느 정도 16 | 각자의 고유한 부분을 갖게 됐습니다. 17 | 그리고 이는 전산학 번역어에서도 다르지 않습니다. 18 | 19 | 이 페이지는 주로 영어가 원어인 전산학의 여러 용어들을 한자문화권의 20 | 여러 지역에서 어떻게 옮겨서 부르고 있는지를 비교한 대조표를 싣고 있습니다. 21 | 22 | 이 저작물은 [크리에이티브 커먼즈 저작자표시-동일조건변경허락 4.0 국제 23 | 라이선스][CC BY-SA 4.0]에 따라 이용할 수 있습니다. 24 | 25 | [한자문화권]: https://ko.wikipedia.org/wiki/%ED%95%9C%EC%9E%90_%EB%AC%B8%ED%99%94%EA%B6%8C 26 | [GitHub]: https://github.com/dahlia/cjk-compsci-terms 27 | [Netlify]: https://app.netlify.com/sites/cjk-compsci-terms/deploys 28 | [CC BY-SA 4.0]: https://creativecommons.org/licenses/by-sa/4.0/ 29 | [GitHub Sponsors]: https://github.com/sponsors/dahlia 30 | 31 | 32 | 33 | 34 | 35 | 일러두기 36 | -------- 37 | 38 | ### 동계어 (cognate) 39 | 40 | 동계어는 한 쪽이 다른 한 쪽에서 파생했거나 공통된 어원을 공유하는 단어들을 41 | 뜻합니다. 42 | 43 | 예를 들어, 영어 computer와 한국어 컴퓨터, 일본어 情報(조우호우)와 한국어 정보(情報)는 동계어입니다. 45 | 46 | 동계어는 같은 색의 테두리로 표시됩니다. 47 | 48 | ### 번역차용 (calque) 49 | 50 | 번역차용이란 원어를 어근 단위로 번역하여 단어를 차용하는 방식입니다. 51 | 52 | 예를 들어, 영어 artificial intelligence의 한국어 번역어 53 | 인공 지능은 영어의 어근 artificial → 54 | 인공intelligence → 55 | 지능을 각각 번역하여 차용했습니다. 56 | 57 | 이와 같이 여러 언어 사이에서 대응되는 어근은 같은 색과 모양의 밑줄로 58 | 표시됩니다. 59 | 60 | ### 한자어 61 | 62 | 어근이 한자어일 경우, 한국식 한자 독음을 글자 위에 표시합니다. 63 | 64 | 예를 들어, 일본어 情報(조우호우)는 한국어 65 | 정보(情報)와 동계어임을 알아보기 쉽도록, 글자 위에는 일본어 독음인 66 | 조우호우가 아닌 한국 한자음 정보를 표시합니다: . 68 | 69 | ### 음차 70 | 71 | 어근이 외국어의 음차일 경우, 원문 표기를 어근 위에 표시합니다. 72 | 73 | 예를 들어, 중국어 圖靈(투링)은 영국 수학자 앨런 74 | 튜링(Alan Turing)의 음차이므로, 75 | 글자 위에는 한국 한자음 도령이 아니라 원어 Turing을 76 | 표시합니다: 圖靈Turing. 77 | 78 | ### 현지음 로마자 표기 79 | 80 | 단어의 현지음은 단어 아래 괄호 안에 로마자로 표기됩니다. 81 | 언어별 전사 방식은 다음과 같습니다. 82 | 83 | 한국어 84 | : [국립국어원 로마자 표기법] (한글 복원을 전제로 한 학술 표기[^1]) 85 | 86 | 일본어 87 | : [헵번식 로마자 표기법] 88 | 89 | 표준 중국어 (중국·대만) 90 | : [한어 병음] 91 | 92 | 광동어 (홍콩) 93 | : [월병] 94 | 95 | *[월병]: 홍콩 언어학 학회 월어 병음 방안 96 | 97 | [^1]: 국립국어원 [〈국어의 로마자 표기법〉 제3장 제8항]. 98 | 99 | [국립국어원 로마자 표기법]: https://kornorms.korean.go.kr/regltn/regltnView.do?regltn_code=0004 100 | [헵번식 로마자 표기법]: https://ko.wikipedia.org/wiki/%ED%97%B5%EB%B2%88%EC%8B%9D_%EB%A1%9C%EB%A7%88%EC%9E%90_%ED%91%9C%EA%B8%B0%EB%B2%95 101 | [한어 병음]: https://ko.wikipedia.org/wiki/%ED%95%9C%EC%96%B4_%EB%B3%91%EC%9D%8C 102 | [월병]: https://ko.wikipedia.org/wiki/%ED%99%8D%EC%BD%A9_%EC%96%B8%EC%96%B4%ED%95%99_%ED%95%99%ED%9A%8C_%EC%9B%94%EC%96%B4_%EB%B3%91%EC%9D%8C_%EB%B0%A9%EC%95%88 103 | [〈국어의 로마자 표기법〉 제3장 제8항]: https://kornorms.korean.go.kr/regltn/regltnView.do?regltn_code=0004#a489 104 | 105 | 106 | 기본 용어 107 | --------- 108 | 109 | [표 보기](tables/basic.yaml) 110 | 111 | 112 | 단위 113 | ---- 114 | 115 | [표 보기](tables/units.yaml) 116 | 117 | 118 | 연구 분야 119 | --------- 120 | 121 | [표 보기](tables/studies.yaml) 122 | 123 | 124 | 프로그래밍 125 | ---------- 126 | 127 | [표 보기](tables/programming.yaml) 128 | 129 | 130 | 도구 131 | ---- 132 | 133 | [표 보기](tables/tools.yaml) 134 | 135 | 136 | 계산 이론 137 | --------- 138 | 139 | [표 보기](tables/theory-comp.yaml) 140 | 141 | 142 | 프로그래밍 패러다임 143 | ------------------- 144 | 145 | [표 보기](tables/paradigms.yaml) 146 | 147 | 148 | 동시성 프로그래밍 149 | ---------------- 150 | 151 | [표 보기](tables/concurrency.yaml) 152 | 153 | 154 | 155 | 자유·오픈 소스 소프트웨어 156 | ------------------------- 157 | 158 | [표 보기](tables/foss.yaml) 159 | -------------------------------------------------------------------------------- /requirements.txt: -------------------------------------------------------------------------------- 1 | Babel >= 2.9.0, < 3.0.0 2 | commonmark >= 0.9.1, < 1.0.0 3 | cached-property >= 1.5.2, < 1.6.0 4 | dragonmapper >= 0.2.6, < 0.3.0 5 | hangul-romanize >= 0.1.0, < 0.2.0 6 | hanja >= 0.15.1, < 0.16.0 7 | html5validator >= 0.4.0, < 0.5.0 8 | git+https://github.com/BYVoid/OpenCC.git@ver.1.1.1#egg=opencc&subdirectory=python; sys_platform != "linux" 9 | Jinja2 >= 3.0.1, < 3.1.0 10 | lazy-import >= 0.2.2, < 0.3.0 11 | lxml >= 4.9.1, < 4.10.0 12 | lxml-stubs >= 0.1.1, < 0.2.0 13 | Markdown >= 3.3.3, < 3.4.0 14 | MarkupSafe >= 2.0.1, < 3.0.0 15 | mypy >= 0.790, < 1 16 | opencc-py >= 1.1.0, < 2.0.0; sys_platform == "linux" 17 | pinyin_jyutping_sentence >= 0.9, < 1.0 18 | pykakasi >= 2.3.0, < 2.4.0 19 | PyYAML >= 6.0.1, < 7.0.0 20 | types-Markdown >= 3.3.3, < 3.4.0 21 | types-PyYAML >= 5.4.0, < 6.0.0 22 | yamllint >= 1.25.0, < 1.26.0 23 | -------------------------------------------------------------------------------- /script.js: -------------------------------------------------------------------------------- 1 | function getGroupRows(term) { 2 | const rows = []; 3 | for (let row = term.parentNode.parentNode; 4 | row != null; 5 | row = row.previousElementSibling) { 6 | rows.push(row); 7 | if (row.classList.contains('group-head')) break; 8 | } 9 | for (let row = term.parentNode.parentNode.nextElementSibling; 10 | row != null && !row.classList.contains('group-head'); 11 | row = row.nextElementSibling) { 12 | rows.push(row); 13 | } 14 | return rows; 15 | } 16 | 17 | function getHoverClasses(term) { 18 | return Array.from(term.classList) 19 | .filter(c => c.startsWith('correspond-')) 20 | .map(c => 'hover-' + c); 21 | } 22 | 23 | function onCorrespond() { 24 | const classes = getHoverClasses(this); 25 | for (const row of getGroupRows(this)) { 26 | row.className = Array.from(row.classList) 27 | .filter(c => !c.startsWith('hover-correspond-')) 28 | .concat(classes) 29 | .join(' '); 30 | } 31 | } 32 | 33 | function offCorrespond() { 34 | for (const row of getGroupRows(this)) { 35 | row.className = Array.from(row.classList) 36 | .filter(c => !c.startsWith('hover-correspond-')) 37 | .join(' '); 38 | } 39 | } 40 | 41 | Array.from(document.querySelectorAll('*[class*="correspond-"]')) 42 | .filter(e => e.className.match(/\bcorrespond-\d+\b/)) 43 | .forEach(e => { 44 | e.addEventListener('mouseover', onCorrespond); 45 | e.addEventListener('mouseout', offCorrespond); 46 | }); 47 | 48 | const tocTitle = document.querySelector('#toc > div > h2').innerText.trim(); 49 | 50 | Array.from(document.querySelectorAll(':not(#toc > div) > h2, h3')) 51 | .forEach(h => { 52 | h.innerHTML += 53 | ` ${tocTitle}`; 54 | }); 55 | 56 | // vim: set et sw=2 ts=2 sts=2 ft=javascript: 57 | -------------------------------------------------------------------------------- /style.css: -------------------------------------------------------------------------------- 1 | @import url('https://fonts.googleapis.com/css2?family=Noto+Sans+HK:wght@100&family=Noto+Sans+JP:wght@100&family=Noto+Sans+KR:wght@100&family=Noto+Sans+SC:wght@100&family=Noto+Sans+TC:wght@100&family=Noto+Serif+JP&family=Noto+Serif+KR&family=Noto+Serif+TC&display=swap'); 2 | @import url(https://cdn.jsdelivr.net/gh/yeun/open-color@v1.7.0/open-color.css); 3 | 4 | :root { 5 | --c-header: var(--oc-gray-9); 6 | --c-header-text: var(--oc-gray-1); 7 | --c-header-link: var(--oc-gray-3); 8 | --c-header-link-active: var(--oc-gray-0); 9 | --c-header-highlight: var(--oc-gray-0); 10 | 11 | --c-toc: var(--oc-gray-2); 12 | --c-toc-border: var(--oc-gray-6); 13 | --c-toc-link: var(--oc-gray-6); 14 | 15 | --c-term-arrow: var(--oc-gray-6); 16 | 17 | --c-content-bg: white; 18 | --c-content-text: var(--oc-gray-9); 19 | --c-content-link: blue; 20 | --c-content-link-active: red; 21 | --c-content-link-visited: purple; 22 | 23 | --c-table-border: var(--oc-gray-6); 24 | --c-table-header: var(--oc-gray-2); 25 | --c-table-header-subtext: var(--oc-gray-7); 26 | 27 | --c-romaninization-tone-sup: var(--oc-gray-6); 28 | 29 | --c-cognate-group-1: var(--oc-red-1); 30 | --c-cognate-group-2: var(--oc-indigo-1); 31 | --c-cognate-group-3: var(--oc-green-1); 32 | --c-cognate-group-4: var(--oc-orange-1); 33 | 34 | --c-correspond-1: var(--oc-indigo-4); 35 | --c-correspond-1-hover: var(--oc-indigo-9); 36 | --c-correspond-2: var(--oc-red-4); 37 | --c-correspond-2-hover: var(--oc-red-9); 38 | --c-correspond-3: var(--oc-green-3); 39 | --c-correspond-3-hover: var(--oc-green-6); 40 | --c-correspond-4: var(--oc-orange-5); 41 | --c-correspond-4-hover: var(--oc-orange-9); 42 | --c-correspond-5: var(--oc-pink-3); 43 | --c-correspond-5-hover: var(--oc-pink-8); 44 | 45 | --c-footnote-border: var(--oc-gray-6); 46 | } 47 | 48 | @media (prefers-color-scheme: dark) { 49 | :root { 50 | --c-header: var(--oc-gray-8); 51 | --c-header-text: var(--oc-gray-3); 52 | --c-header-link: var(--oc-gray-1); 53 | --c-header-link-active: var(--oc-gray-0); 54 | --c-header-highlight: var(--oc-gray-0); 55 | 56 | --c-toc: var(--oc-gray-8); 57 | --c-toc-border: var(--oc-gray-7); 58 | --c-toc-link: var(--oc-gray-7); 59 | 60 | --c-term-arrow: var(--oc-gray-6); 61 | 62 | --c-content-bg: var(--oc-gray-9); 63 | --c-content-text: var(--oc-gray-1); 64 | --c-content-link: var(--oc-blue-5); 65 | --c-content-link-active: var(--oc-red-6); 66 | --c-content-link-visited: var(--oc-grape-4); 67 | 68 | --c-table-border: var(--oc-gray-7); 69 | --c-table-header: var(--oc-gray-8); 70 | --c-table-header-subtext: var(--oc-gray-4); 71 | 72 | --c-romaninization-tone-sup: var(--oc-gray-5); 73 | 74 | --c-cognate-group-1: hsl(0, 20%, 25%); 75 | --c-cognate-group-2: hsl(230deg, 20%, 31%); 76 | --c-cognate-group-3: hsl(123deg, 20%, 20%); 77 | --c-cognate-group-4: hsl(17deg, 20%, 28%); 78 | 79 | --c-correspond-1: var(--oc-indigo-9); 80 | --c-correspond-1-hover: var(--oc-indigo-4); 81 | --c-correspond-2: var(--oc-red-9); 82 | --c-correspond-2-hover: var(--oc-red-4); 83 | --c-correspond-3: var(--oc-green-6); 84 | --c-correspond-3-hover: var(--oc-green-3); 85 | --c-correspond-4: var(--oc-orange-9); 86 | --c-correspond-4-hover: var(--oc-orange-5); 87 | --c-correspond-5: var(--oc-pink-8); 88 | --c-correspond-5-hover: var(--oc-pink-3); 89 | 90 | --c-footnote-border: var(--oc-gray-6); 91 | } 92 | } 93 | 94 | .term { 95 | font-weight: 100; 96 | text-decoration-skip-ink: none; 97 | text-decoration-skip: none; 98 | } 99 | 100 | .term:lang(en) { 101 | font-family: 'Helvetica Neue', HelveticaNeue, Helvetica, Arial, sans-serif; 102 | font-weight: 300; 103 | } 104 | 105 | .term:lang(ko) { 106 | font-family: 107 | 'Noto Sans CJK KR', 108 | NotoSansCJKkr, 109 | 'Noto Sans KR', 110 | 'Noto Sans CJK', 111 | NotoSansCJK, 112 | sans-serif; 113 | } 114 | 115 | .term:lang(zh-Hans), .term:lang(zh-CN) { 116 | font-family: 117 | 'Noto Sans CJK SC', 118 | NotoSansCJKsc, 119 | 'Noto Sans SC', 120 | 'Noto Sans CJK', 121 | NotoSansCJK, 122 | 'PingFang SC', 123 | 'Hiragino Sans GB', 124 | 'Microsoft YaHei', 125 | sans-serif; 126 | } 127 | 128 | .term:lang(zh-Hant), .term:lang(zh-TW) { 129 | font-family: 130 | 'Noto Sans CJK TC', 131 | NotoSansCJKtc, 132 | 'Noto Sans TC', 133 | 'Noto Sans CJK', 134 | NotoSansCJK, 135 | 'STKaitiTC-Black', 136 | 'PingFang TC', 137 | 'Hiragino Sans CNS', 138 | 'Microsoft JhengHei', 139 | sans-serif; 140 | } 141 | 142 | .term:lang(zh-HK) { 143 | font-family: 144 | 'Noto Sans CJK HK', 145 | NotoSansCJKhk, 146 | 'Noto Sans HK', 147 | 'Noto Sans CJK', 148 | NotoSansCJK, 149 | 'PingFang TC', 150 | 'Hiragino Sans CNS', 151 | 'Microsoft JhengHei', 152 | sans-serif; 153 | } 154 | 155 | .term:lang(ja) { 156 | font-family: 157 | 'Noto Sans CJK JP', 158 | NotoSansCJKjp, 159 | 'Noto Sans JP', 160 | 'Noto Sans CJK', 161 | NotoSansCJK, 162 | 'Hiragino Sans', 163 | 'Hiragino Kaku Gothic Pro', 164 | 'Yu Gothic', 165 | YuGothic, 166 | Meiryo, 167 | sans-serif; 168 | } 169 | 170 | * { 171 | box-sizing: border-box; 172 | } 173 | 174 | body { 175 | padding: 0; 176 | margin: 0; 177 | background-color: var(--c-content-bg); 178 | } 179 | 180 | body > *:not(div.terms, header) { 181 | margin-left: auto; 182 | margin-right: auto; 183 | max-width: 55rem; 184 | } 185 | 186 | @media (max-width: 1023px) { 187 | body > *:not(div.terms, header) { 188 | max-width: calc(100% - 2rem); 189 | } 190 | } 191 | 192 | :root { 193 | font-family: serif; 194 | color: var(--c-content-text); 195 | } 196 | 197 | body > header { 198 | width: 100%; 199 | padding: 0.5rem 1rem; 200 | background-color: var(--c-header); 201 | color: var(--c-header-text); 202 | text-align: center; 203 | } 204 | 205 | body > header > nav > a { 206 | text-decoration: none; 207 | color: var(--c-header-link); 208 | margin-left: 1rem; 209 | } 210 | 211 | body > header > nav > a:link, body > header > nav > a:visited { 212 | color: var(--c-header-link); 213 | } 214 | 215 | body > header > nav > a:active, body > header > nav > a:visited:active { 216 | color: var(--c-header-link-active); 217 | } 218 | 219 | body > header > nav > a:first-child { 220 | margin-left: 0; 221 | } 222 | 223 | body > header > nav > a:not([rel=canonical]):hover { 224 | text-decoration: underline; 225 | text-underline-offset: 0.2rem; 226 | } 227 | 228 | body > header > nav > a[rel=canonical] { 229 | font-weight: bolder; 230 | color: var(--c-header-highlight); 231 | cursor: default; 232 | } 233 | 234 | body > header > nav > a[rel=source-code] { 235 | margin-left: 1.5rem; 236 | } 237 | 238 | body > header > nav > a[rel=source-code], body > header > nav > a[rel=license] { 239 | font-size: smaller; 240 | } 241 | 242 | h1 { 243 | font-weight: normal; 244 | } 245 | 246 | h2 { 247 | margin-top: 2rem; 248 | font-weight: normal; 249 | } 250 | 251 | h2 > a.toc, h3 > a.toc { 252 | display: none; 253 | font-family: sans-serif; 254 | font-size: small; 255 | font-weight: bolder; 256 | vertical-align: super; 257 | text-transform: uppercase; 258 | text-decoration: none; 259 | color: var(--c-toc-link); 260 | } 261 | 262 | h3 > a.toc { 263 | font-size: x-small; 264 | } 265 | 266 | h2 > a.toc:before, h3 > a.toc:before { 267 | content: '\2191'; 268 | padding-right: .2rem; 269 | } 270 | 271 | h2:hover > a.toc, h3:hover > a.toc { 272 | display: inline; 273 | } 274 | 275 | #toc > div { 276 | display: inline-block; 277 | border: 1px solid var(--c-toc-border); 278 | background-color: var(--c-toc); 279 | } 280 | 281 | #toc h2 { 282 | margin: 0.5em; 283 | text-align: center; 284 | font-size: large; 285 | font-weight: bolder; 286 | } 287 | 288 | #toc ul { 289 | margin: 0; 290 | font-size: medium; 291 | } 292 | 293 | #toc .toc > ul { 294 | margin: 0.5em 1em 0.5em 0; 295 | } 296 | 297 | h3:lang(en), h3:lang(fr) { 298 | font-weight: normal; 299 | } 300 | 301 | h3:lang(en), h3 :lang(en), h3:lang(fr), h3 :lang(fr) { 302 | font-style: italic; 303 | } 304 | 305 | h3:lang(ja), h3:lang(ko), h3:lang(zh) { 306 | font-weight: bolder; 307 | } 308 | 309 | h3:lang(ja) :not(:lang(ja)), 310 | h3:lang(ko) :not(:lang(ko)), 311 | h3:lang(zh) :not(:lang(zh)) { 312 | font-weight: normal; 313 | } 314 | 315 | body > dl > dt { 316 | float: left; 317 | clear: both; 318 | } 319 | 320 | body > dl > dt:after { 321 | content: '\2192'; 322 | color: var(--c-term-arrow); 323 | margin-left: 0.5rem; 324 | margin-right: 0.5rem; 325 | } 326 | 327 | body > dl > dd, body > dl > dd > p { 328 | margin: 0; 329 | } 330 | 331 | h3[id] + p, h3[id] + p + p, h3[id] + p + p + p, 332 | h3[id] + p + dl { 333 | padding-left: 1rem; 334 | } 335 | 336 | p:lang(en), li:lang(en) { 337 | line-height: 130%; 338 | } 339 | 340 | h1:lang(en), 341 | h2:lang(en), 342 | p:lang(en), 343 | q:lang(en), 344 | dl:lang(en), 345 | li:lang(en), 346 | span:lang(en), span:lang(fr), 347 | nav :lang(en) { 348 | font-family: serif; 349 | } 350 | 351 | h1:lang(ko), 352 | h2:lang(ko), 353 | p:lang(ko), 354 | q:lang(ko), 355 | dl:lang(ko), 356 | li:lang(ko), 357 | span:lang(ko), 358 | nav :lang(ko) { 359 | font-family: 'Noto Serif KR', serif; 360 | } 361 | 362 | h1:lang(ja), 363 | h2:lang(ja), 364 | p:lang(ja), 365 | q:lang(ja), 366 | dl:lang(ja), 367 | li:lang(ja), 368 | span:lang(ja), 369 | nav :lang(ja) { 370 | font-family: 'Hiragino Mincho ProN', 'Noto Serif JP', serif; 371 | } 372 | 373 | h1:lang(zh), 374 | h2:lang(zh), 375 | p:lang(zh), 376 | q:lang(zh), 377 | dl:lang(zh), 378 | li:lang(zh), 379 | span:lang(zh), 380 | nav :lang(zh) { 381 | font-family: 'Songti TC', 'Noto Serif TC', serif; 382 | } 383 | 384 | p:lang(ja), p:lang(ko), p:lang(zh), 385 | li:lang(ja), li:lang(ko), li:lang(zh) { 386 | line-height: 160%; 387 | text-align: justify; 388 | } 389 | 390 | a:link { 391 | color: var(--c-content-link); 392 | } 393 | 394 | a:active { 395 | color: var(--c-content-link-active); 396 | } 397 | 398 | a:visited { 399 | color: var(--c-content-link-visited); 400 | } 401 | 402 | a:visited:active { 403 | color: var(--c-content-link-active); 404 | } 405 | 406 | .footnote { 407 | margin-top: 2rem; 408 | } 409 | 410 | .footnote > hr { 411 | border: none; 412 | border-top: 1px solid var(--c-footnote-border); 413 | } 414 | 415 | .footnote > ol { 416 | font-size: smaller; 417 | } 418 | 419 | rt { 420 | user-select: none; 421 | } 422 | 423 | div.terms { 424 | max-width: 100%; 425 | overflow: auto; 426 | } 427 | 428 | table.terms { 429 | width: calc(100% - 2rem); 430 | margin: 1rem 1rem 3rem 1rem; 431 | border: 2px solid var(--c-table-border); 432 | border-top: none; 433 | border-bottom-width: 1px; 434 | border-spacing: 0; 435 | font-family: sans-serif; 436 | } 437 | 438 | table.terms > thead { 439 | background-color: var(--c-table-header); 440 | text-align: center; 441 | } 442 | 443 | @media (max-width: 1023px) { 444 | table.terms { 445 | font-size: smaller; 446 | } 447 | table.terms > thead { 448 | font-size: x-small; 449 | } 450 | } 451 | 452 | table.terms > thead > tr:first-child > td, 453 | table.terms > thead > tr:first-child > th { 454 | border-top: 2px solid var(--c-table-border); 455 | } 456 | 457 | table.terms > thead td[rowspan], 458 | table.terms > thead th[rowspan], 459 | table.terms > thead > tr:last-child > td, 460 | table.terms > thead > tr:last-child > th { 461 | border-bottom: 1px solid var(--c-table-border); 462 | } 463 | 464 | @-moz-document url-prefix() { 465 | table.terms > thead { 466 | position: sticky; 467 | top: 0; 468 | } 469 | } 470 | 471 | table.terms > thead .native-name { 472 | color: var(--c-table-header-subtext); 473 | font-size: smaller; 474 | } 475 | 476 | @media (max-width: 1023px) { 477 | table.terms > thead .native-name { 478 | display: none; 479 | } 480 | } 481 | 482 | table.terms > tbody { 483 | vertical-align: top; 484 | } 485 | 486 | table.terms th { 487 | font-weight: normal; 488 | } 489 | 490 | table.terms > thead td[rowspan], 491 | table.terms > thead td[colspan], 492 | table.terms > thead td:first-child, 493 | table.terms > tbody td { 494 | border-left: 1px solid var(--c-table-border); 495 | } 496 | 497 | table.terms th, 498 | table.terms td { 499 | padding: .5em; 500 | } 501 | 502 | table.terms > tbody td[rowspan], 503 | table.terms > tbody th[rowspan], 504 | table.terms > tbody > tr.group-foot > td, 505 | table.terms > tbody > tr.group-foot > th { 506 | border-bottom: 1px solid var(--c-table-border); 507 | } 508 | 509 | table.terms .term { 510 | word-break: keep-all; 511 | white-space: nowrap; 512 | } 513 | 514 | @media (max-width: 1023px) { 515 | table.terms .term { 516 | font-size: smaller; 517 | } 518 | } 519 | 520 | @media (min-width: 1024px) { 521 | table.terms .term { 522 | font-size: x-large; 523 | } 524 | } 525 | 526 | table.terms .romanization { 527 | font-family: sans-serif; 528 | display: block; 529 | word-break: keep-all; 530 | white-space: nowrap; 531 | } 532 | 533 | table.terms .romanization:lang(yue-HK-Latn-jyutping) sup { 534 | color: var(--c-romaninization-tone-sup); 535 | font-size: x-small; 536 | } 537 | 538 | @media (max-width: 1023px) { 539 | table.terms .romanization { 540 | font-size: x-small; 541 | } 542 | } 543 | 544 | .cognate-group-1, 545 | .cognate-group-2, 546 | .cognate-group-3, 547 | .cognate-group-4, 548 | .cognate-group-5 { 549 | --offset: 0%; 550 | --height: 100%; 551 | background-clip: padding-box; 552 | background-image: 553 | linear-gradient( 554 | to bottom, 555 | var(--color) 0 .5rem, 556 | transparent .5rem 100% 557 | ), 558 | linear-gradient( 559 | to top, 560 | transparent 0 var(--offset), 561 | var(--color) var(--offset) calc(var(--offset) + .5rem), 562 | transparent .5rem 100% 563 | ), 564 | linear-gradient( 565 | to right, 566 | var(--color) .5rem, 567 | transparent .5rem calc(100% - .5rem), 568 | var(--color) calc(100% - .5rem) 569 | ); 570 | background-size: auto, auto, 100% var(--height); 571 | background-repeat: no-repeat, no-repeat, no-repeat; 572 | } 573 | 574 | .cognate-group-1[rowspan="2"], 575 | .cognate-group-2[rowspan="2"], 576 | .cognate-group-3[rowspan="2"], 577 | .cognate-group-4[rowspan="2"], 578 | .cognate-group-5[rowspan="2"] { 579 | --offset: 49.9985858798%; 580 | --height: 50%; 581 | } 582 | 583 | .cognate-group-1[rowspan="3"], 584 | .cognate-group-2[rowspan="3"], 585 | .cognate-group-3[rowspan="3"], 586 | .cognate-group-4[rowspan="3"], 587 | .cognate-group-5[rowspan="3"] { 588 | --offset: 66.66%; 589 | --height: 33.33%; 590 | } 591 | 592 | .cognate-group-1 { 593 | --color: var(--c-cognate-group-1); 594 | } 595 | 596 | .cognate-group-2 { 597 | --color: var(--c-cognate-group-2); 598 | } 599 | 600 | .cognate-group-3 { 601 | --color: var(--c-cognate-group-3); 602 | } 603 | 604 | .cognate-group-4 { 605 | --color: var(--c-cognate-group-4); 606 | } 607 | 608 | .hover-correspond-1 .term:not(.correspond-1), 609 | .hover-correspond-2 .term:not(.correspond-2), 610 | .hover-correspond-3 .term:not(.correspond-3), 611 | .hover-correspond-4 .term:not(.correspond-4), 612 | .hover-correspond-5 .term:not(.correspond-5) { 613 | opacity: 0.5; 614 | } 615 | 616 | .correspond-1 { 617 | text-decoration: underline; 618 | text-decoration-style: wavy; 619 | text-decoration-color: var(--c-correspond-1); 620 | } 621 | 622 | .hover-correspond-1 .correspond-1 { 623 | text-decoration-color: var(--c-correspond-1-hover); 624 | } 625 | 626 | .correspond-2 { 627 | text-decoration: underline; 628 | text-decoration-style: double; 629 | text-decoration-color: var(--c-correspond-2); 630 | } 631 | 632 | .hover-correspond-2 .correspond-2 { 633 | text-decoration-color: var(--c-correspond-2-hover); 634 | } 635 | 636 | .correspond-3 { 637 | text-decoration: underline; 638 | text-decoration-color: var(--c-correspond-3); 639 | text-decoration-thickness: 0.2rem; 640 | } 641 | 642 | .hover-correspond-3 .correspond-3 { 643 | text-decoration-color: var(--c-correspond-3-hover); 644 | } 645 | 646 | .correspond-4 { 647 | text-decoration: underline; 648 | text-decoration-style: dotted; 649 | text-decoration-color: var(--c-correspond-4); 650 | } 651 | 652 | .hover-correspond-4 .correspond-4 { 653 | text-decoration-style: solid; 654 | text-decoration-color: var(--c-correspond-4-hover); 655 | } 656 | 657 | .correspond-5 { 658 | text-decoration: underline; 659 | text-decoration-style: wavy; 660 | text-decoration-color: var(--c-correspond-5); 661 | } 662 | 663 | .hover-correspond-5 .correspond-5 { 664 | text-decoration-color: var(--c-correspond-5-hover); 665 | } 666 | 667 | /* vim: set et sw=2 ts=2 sts=2 ft=css: */ 668 | -------------------------------------------------------------------------------- /table.schema.yaml: -------------------------------------------------------------------------------- 1 | $schema: https://json-schema.org/draft/2019-09/schema 2 | $id: https://github.com/dahlia/cjk-compsci-terms/raw/main/table.schema.yaml 3 | title: CJK computer science terms 4 | description: | 5 | The list of computer science terms and their translations in English & CJK 6 | type: array 7 | items: 8 | $ref: "#/definitions/translation" 9 | 10 | definitions: 11 | translation: 12 | type: object 13 | propertyNames: 14 | $ref: "#/definitions/locale" 15 | patternProperties: 16 | "^[a-z]{2}(-[A-Z]{2}|-[A-Z][a-z]+)?$": 17 | $ref: "#/definitions/wordMap" 18 | 19 | locale: 20 | type: string 21 | # In order to prevent mistakes, accept only the main CJK locales 22 | # rather than accept any valid locale codes: 23 | enum: ["en", "ja", "ko", "zh-CN", "zh-HK", "zh-TW"] 24 | 25 | wordMap: 26 | propertyNames: 27 | # TODO: Reject non-English/non-CJK characters 28 | pattern: "^.+$" 29 | patternProperties: 30 | ".*": 31 | $ref: "#/definitions/word" 32 | 33 | word: 34 | type: array 35 | items: 36 | $ref: "#/definitions/term" 37 | 38 | term: 39 | type: object 40 | additionalProperties: false 41 | properties: 42 | term: { type: string } 43 | space: 44 | anyOf: 45 | - { type: boolean } 46 | - { const: "hyphen" } 47 | correspond: { type: string } 48 | read: { type: string } 49 | loan: { type: string } 50 | required: [ term ] 51 | 52 | # vim: set et sw=2 ts=2 sts=2 ft=yaml: 53 | -------------------------------------------------------------------------------- /tables/basic.yaml: -------------------------------------------------------------------------------- 1 | # Computer 2 | - en: 3 | computer: 4 | - { term: comput, correspond: compute } 5 | - { term: er, space: no } 6 | ja: 7 | computer: 8 | - { term: コンピュータ, loan: computer } 9 | ko: 10 | computer: 11 | - { term: 컴퓨터, loan: computer } 12 | zh-CN: 13 | 電腦: 14 | - { term: 电, correspond: electronic, read: diàn } 15 | - { term: 脑, correspond: brain, read: nǎo, space: no } 16 | zh-HK: 17 | 電腦: 18 | - { term: 電, correspond: electronic, read: din6 } 19 | - { term: 腦, correspond: brain, read: nou5, space: no } 20 | zh-TW: 21 | 電腦: 22 | - { term: 電, correspond: electronic, read: ㄉㄧㄢˋ } 23 | - { term: 腦, correspond: brain, read: ㄋㄠˇ, space: no } 24 | 25 | # Smartphone 26 | - en: 27 | smartphone: 28 | - term: smart 29 | - { term: phone, correspond: telephone, space: no } 30 | ja: 31 | smartphone: 32 | - { term: スマート, loan: smart } 33 | - { term: フォン, loan: phone, correspond: telephone } 34 | ko: 35 | smartphone: 36 | - { term: 스마트, loan: smart } 37 | - { term: 폰, loan: phone, correspond: telephone } 38 | zh-CN: 39 | 智能手機: 40 | - { term: 智能, correspond: smart, read: zhì néng } 41 | - { term: 手机, correspond: telephone, read: shǒu jī } 42 | zh-HK: 43 | 智能電話: 44 | - { term: 智能, correspond: smart, read: zi3 nang4 } 45 | - { term: 電話, correspond: telephone, read: din6 waa2 } 46 | 智能手機: 47 | - { term: 智能, correspond: smart, read: zi3 nang4 } 48 | - { term: 手機, correspond: telephone, read: sau2 gei1 } 49 | zh-TW: 50 | 智慧型手機: 51 | - { term: 智慧, correspond: smart, read: ㄓˋ ㄏㄨㄟˋ } 52 | - { term: 型, correspond: type, read: ㄒㄧㄥˊ } 53 | - { term: 手機, correspond: telephone, read: ㄕㄡˇ ㄐㄧ } 54 | 55 | # Software 56 | - en: 57 | software: 58 | - term: soft 59 | - { term: ware, space: no } 60 | ja: 61 | software: 62 | - { term: ソフト, loan: soft } 63 | - { term: ウェア, loan: ware, space: no } 64 | ko: 65 | software: 66 | - { term: 소프트, loan: soft } 67 | - { term: 웨어, loan: ware, space: no } 68 | zh-CN: 69 | 軟件: 70 | - { term: 软, correspond: soft, read: ruǎn } 71 | - { term: 件, correspond: ware, read: jiàn, space: no } 72 | zh-HK: 73 | 軟件: 74 | - { term: 軟, correspond: soft, read: jyun5 } 75 | - { term: 件, correspond: ware, read: gin2, space: no } 76 | zh-TW: 77 | 軟體: 78 | - { term: 軟, correspond: soft, read: ㄖㄨㄢˇ } 79 | - { term: 體, correspond: ware, read: ㄊㄧˇ, space: no } 80 | 81 | # Hardware 82 | - en: 83 | hardware: 84 | - { term: hard } 85 | - { term: ware, space: no } 86 | ja: 87 | hardware: 88 | - { term: ハード, loan: hard } 89 | - { term: ウェア, loan: ware, space: no } 90 | ko: 91 | hardware: 92 | - { term: 하드, loan: hard } 93 | - { term: 웨어, loan: ware, space: no } 94 | zh-CN: 95 | 硬件: 96 | - { term: 硬, correspond: hard, read: yìng } 97 | - { term: 件, correspond: ware, read: jiàn, space: no } 98 | zh-HK: 99 | 硬件: 100 | - { term: 硬, correspond: hard, read: ngaang6 } 101 | - { term: 件, correspond: ware, read: gin2, space: no } 102 | zh-TW: 103 | 硬體: 104 | - { term: 硬, correspond: hard, read: ㄧㄥˋ } 105 | - { term: 體, correspond: ware, read: ㄊㄧˇ, space: no } 106 | 107 | # Information 108 | - en: 109 | information: 110 | - term: information 111 | ja: 112 | 情報: 113 | - { term: 情報, correspond: information, read: じょう ほう } 114 | ko: 115 | 情報: 116 | - { term: 情報, correspond: information, read: 정 보 } 117 | zh-CN: 118 | 信息: 119 | - { term: 信息, correspond: information, read: xìn xī } 120 | zh-HK: 121 | 資訊: 122 | - { term: 資訊, correspond: information, read: zi1 seon3 } 123 | 信息: 124 | - { term: 信息, correspond: information, read: seon3 sik1 } 125 | zh-TW: 126 | 資訊: 127 | - { term: 資訊, correspond: information, read: ㄗ ㄒㄩㄣˋ } 128 | 129 | # Data 130 | - en: 131 | data: 132 | - term: data 133 | ja: 134 | data: 135 | - { term: データ, loan: data } 136 | ko: 137 | data: 138 | - { term: 데이터, loan: data } 139 | 資料: 140 | - { term: 資料, correspond: data, read: 자 료 } 141 | zh-CN: 142 | 數據: 143 | - { term: 数, correspond: number, read: shù } 144 | - { term: 据, correspond: evidence, read: jù, space: no } 145 | zh-HK: 146 | 資料: 147 | - { term: 資料, correspond: data, read: zi1 liu2 } 148 | 數據: 149 | - { term: 數, correspond: number, read: sou3 } 150 | - { term: 據, correspond: evidence, read: geoi3, space: no } 151 | zh-TW: 152 | 資料: 153 | - { term: 資料, correspond: data, read: ㄗ ㄌㄧㄠˋ } 154 | 155 | # Network 156 | - en: 157 | network: 158 | - term: net 159 | - { term: work, space: no } 160 | ja: 161 | network: 162 | - { term: ネット, loan: net } 163 | - { term: ワーク, loan: work, space: no } 164 | net: 165 | - { term: ネット, loan: net } 166 | ko: 167 | network: 168 | - { term: 네트, loan: net } 169 | - { term: 워크, loan: work, space: no } 170 | zh-CN: 171 | 網絡: 172 | - { term: 网, correspond: net, read: wǎng } 173 | - { term: 络, correspond: tie, read: luò, space: no } 174 | zh-HK: 175 | 網絡: 176 | - { term: 網, correspond: net, read: mong5 } 177 | - { term: 絡, correspond: tie, read: lok3, space: no } 178 | zh-TW: 179 | 網路: 180 | - { term: 網, correspond: net, read: ㄨㄤˇ } 181 | - { term: 路, correspond: road, read: ㄌㄨˋ, space: no } 182 | 183 | # Application 184 | - en: 185 | application: 186 | - term: application 187 | app: 188 | - term: app 189 | ja: 190 | application: 191 | - { term: アプリケーション, loan: application } 192 | app: 193 | - { term: アプリ, correspond: app } 194 | 應用: 195 | - { term: 応用, correspond: application, read: おう よう } 196 | ko: 197 | application: 198 | - { term: 애플리케이션, loan: application } 199 | app: 200 | - { term: 앱, loan: app } 201 | 應用 program: 202 | - { term: 應用, correspond: application, read: 응 용 } 203 | - { term: 프로그램, loan: program } 204 | zh-CN: 205 | 應用程序: 206 | - { term: 应用, correspond: application, read: yìng yòng } 207 | - { term: 程序, correspond: program, read: chéng xù } 208 | zh-HK: 209 | 應用程式: 210 | - { term: 應用, correspond: application, read: jing3 jung6 } 211 | - { term: 程式, correspond: program, read: cing4 sik1 } 212 | zh-TW: 213 | 應用程式: 214 | - { term: 應用, correspond: application, read: ㄧㄥˋ ㄩㄥˋ } 215 | - { term: 程式, correspond: program, read: ㄔㄥˊ ㄕˋ } 216 | 217 | # vim: set et sw=2 ts=2 sts=2 ft=yaml: 218 | -------------------------------------------------------------------------------- /tables/concurrency.yaml: -------------------------------------------------------------------------------- 1 | # Concurrency 2 | - en: 3 | concurrency: 4 | - { term: concurren, correspond: concurrent } 5 | - { term: cy, correspond: quality, space: no } 6 | ja: 7 | 竝行性: 8 | - { term: 並行, correspond: concurrent, read: へい こう } 9 | - { term: 性, correspond: quality, read: せい, space: no } 10 | ko: 11 | 同時性: 12 | - { term: 同時, correspond: concurrent, read: 동 시 } 13 | - { term: 性, correspond: quality, read: 성, space: no } 14 | 竝行性: 15 | - { term: 竝行, correspond: concurrent, read: 병 행 } 16 | - { term: 性, correspond: quality, read: 성, space: no } 17 | zh-CN: 18 | 倂發性: 19 | - { term: 并发, correspond: concurrent, read: bìng fā } 20 | - { term: 性, correspond: quality, read: xìng, space: no } 21 | zh-HK: 22 | 竝行性: 23 | - { term: 並行, correspond: concurrent, read: bing6 hang4 } 24 | - { term: 性, correspond: quality, read: sing3, space: no } 25 | 倂發性: 26 | - { term: 併發, correspond: concurrent, read: bing3 faat3 } 27 | - { term: 性, correspond: quality, read: sing3, space: no } 28 | zh-TW: 29 | 竝行性: 30 | - { term: 並行, correspond: concurrent, read: ㄅㄧㄥˋ ㄒㄧㄥˊ } 31 | - { term: 性, correspond: quality, read: ㄒㄧㄥˋ, space: no } 32 | 倂發性: 33 | - { term: 併發, correspond: concurrent, read: ㄅㄧㄥˋ ㄈㄚ } 34 | - { term: 性, correspond: quality, read: ㄒㄧㄥˋ, space: no } 35 | 36 | # Concurrent programming 37 | - en: 38 | concurrent programming: 39 | - term: concurrent 40 | - term: programming 41 | ja: 42 | 竝行計算: 43 | - { term: 並行, correspond: concurrent, read: へい こう } 44 | - { term: プログラミング, loan: programming } 45 | ko: 46 | 同時性 programming: 47 | - { term: 同時性, correspond: concurrent, read: 동 시 성 } 48 | - { term: 프로그래밍, loan: programming } 49 | zh-CN: 50 | 倂發編程: 51 | - { term: 并发, correspond: concurrent, read: bìng fā } 52 | - { term: 编程, correspond: programming, read: biān chéng } 53 | zh-HK: 54 | 倂發編程: 55 | - { term: 併發, correspond: concurrent, read: bing3 faat3 } 56 | - { term: 編程, correspond: programming, read: pin1 cing4 } 57 | zh-TW: 58 | 倂發編程: 59 | - { term: 併發, correspond: concurrent, read: ㄅㄧㄥˋ ㄈㄚ } 60 | - { term: 編程, correspond: programming, read: ㄅㄧㄢ ㄔㄥˊ } 61 | 62 | # Synchronization 63 | - en: 64 | synchronization: 65 | - { term: synchron, correspond: synchronous } 66 | - { term: ization, correspond: make, space: no } 67 | ja: 68 | 同期: 69 | - { term: 同期, correspond: synchronous, read: どう き } 70 | ko: 71 | 同期化: 72 | - { term: 同期, correspond: synchronous, read: 동 기 } 73 | - { term: 化, correspond: make, read: 화, space: no } 74 | zh-CN: 75 | 同步: 76 | - { term: 同步, correspond: synchronous, read: tóng bù } 77 | 同步化: 78 | - { term: 同步, correspond: synchronous, read: tóng bù } 79 | - { term: 化, correspond: make, read: huà, space: no } 80 | zh-HK: 81 | 同步: 82 | - { term: 同步, correspond: synchronous, read: tung4 bou6 } 83 | 同步化: 84 | - { term: 同步, correspond: synchronous, read: tung4 bou6 } 85 | - { term: 化, correspond: make, read: faa3, space: no } 86 | zh-TW: 87 | 同步: 88 | - { term: 同步, correspond: synchronous, read: ㄊㄨㄥˊ ㄅㄨˋ } 89 | 同步化: 90 | - { term: 同步, correspond: synchronous, read: ㄊㄨㄥˊ ㄅㄨˋ } 91 | - { term: 化, correspond: make, read: ㄏㄨㄚˋ, space: no } 92 | 93 | # Multiprocessing 94 | - en: 95 | multiprocessing: 96 | - { term: multi, correspond: multiple } 97 | - { term: processing, correspond: process, space: no } 98 | ja: 99 | multiprocessing: 100 | - { term: マルチ, loan: multi, correspond: multiple } 101 | - { term: プロセッシング, loan: processing, correspond: process, space: no } 102 | ko: 103 | multiprocessing: 104 | - { term: 멀티, loan: multi, correspond: multiple } 105 | - { term: 프로세싱, loan: processing, correspond: process, space: no } 106 | 多重處理: 107 | - { term: 多重, read: 다 중, correspond: multiple } 108 | - { term: 處理, read: 처 리, correspond: process } 109 | zh-CN: 110 | 多進程: 111 | - { term: 多, read: duō, correspond: multiple } 112 | - { term: 進程, read: jìn chéng, correspond: process } 113 | zh-HK: 114 | 多元處理: 115 | - { term: 多元, read: do1 jyun4, correspond: multiple } 116 | - { term: 處理, read: cyu2 lei5, correspond: process } 117 | 多重處理: 118 | - { term: 多重, read: do1 cung4, correspond: multiple } 119 | - { term: 處理, read: cyu2 lei5, correspond: process } 120 | zh-TW: 121 | 多元處理: 122 | - { term: 多元, read: ㄉㄨㄛ ㄩㄢˊ, correspond: multiple } 123 | - { term: 處理, read: ㄔㄨˇ ㄌㄧˇ, correspond: process } 124 | 多重處理: 125 | - { term: 多重, read: ㄉㄨㄛ ㄔㄨㄥˊ, correspond: multiple } 126 | - { term: 處理, read: ㄔㄨˇ ㄌㄧˇ, correspond: process } 127 | 128 | # Thread 129 | - en: 130 | thread: 131 | - term: thread 132 | ja: 133 | thread: 134 | - { term: スレッド, loan: thread } 135 | ko: 136 | thread: 137 | - { term: 스레드, loan: thread } 138 | zh-CN: 139 | 線程: 140 | - { term: 线, correspond: thread, read: xiàn } 141 | - { term: 程, correspond: process, read: chéng } 142 | zh-HK: 143 | 線程: 144 | - { term: 線, correspond: thread, read: sin3 } 145 | - { term: 程, correspond: process, read: cing4 } 146 | zh-TW: 147 | 執行緒: 148 | - { term: 執行, correspond: process, read: ㄓˊ ㄒㄧㄥˊ } 149 | - { term: 緒, correspond: thread, read: ㄒㄩˋ } 150 | 151 | # Lock & mutex 152 | - en: 153 | lock: 154 | - term: lock 155 | mutex: 156 | - { term: mut, correspond: mutual } 157 | - { term: ex, correspond: exclusion, space: no } 158 | ja: 159 | lock: 160 | - { term: ロック, loan: lock } 161 | ko: 162 | lock: 163 | - { term: 락, loan: lock } 164 | mutex: 165 | - { term: 뮤텍스, loan: mutex } # FIXME 166 | zh-CN: 167 | 鎖: 168 | - { term: 锁, correspond: lock, read: suǒ } 169 | 互斥鎖: 170 | - { term: 互, correspond: mutual, read: hù } 171 | - { term: 斥, correspond: exclusion, read: chì, space: no } 172 | - { term: 锁, correspond: lock, read: suǒ } 173 | zh-HK: 174 | 鎖: 175 | - { term: 鎖, correspond: lock, read: so2 } 176 | 互斥鎖: 177 | - { term: 互, correspond: mutual, read: wu6 } 178 | - { term: 斥, correspond: exclusion, read: cik1, space: no } 179 | - { term: 鎖, correspond: lock, read: so2 } 180 | zh-TW: 181 | 鎖: 182 | - { term: 鎖, correspond: lock, read: ㄙㄨㄛˇ } 183 | 互斥鎖: 184 | - { term: 互, correspond: mutual, read: ㄏㄨˋ } 185 | - { term: 斥, correspond: exclusion, read: ㄔˋ, space: no } 186 | - { term: 鎖, correspond: lock, read: ㄙㄨㄛˇ } 187 | 188 | # Monitor 189 | - en: 190 | monitor: 191 | - { term: moni, correspond: watch } 192 | - { term: tor, correspond: agent, space: no } 193 | ja: 194 | monitor: 195 | - { term: モニ, loan: moni, correspond: watch } 196 | - { term: タ, loan: tor, correspond: agent, space: no } 197 | ko: 198 | monitor: 199 | - { term: 모니, loan: moni, correspond: watch } 200 | - { term: 터, loan: tor, correspond: agent, space: no } 201 | zh-CN: 202 | 管程: 203 | - { term: 管, read: guǎn, correspond: watch } 204 | - { term: 程, read: chéng, correspond: process, space: no } 205 | 監視器: 206 | - { term: 监视, read: jiān shì, correspond: watch } 207 | - { term: 器, read: qì, correspond: agent, space: no } 208 | zh-HK: 209 | 監視器: 210 | - { term: 監視, read: gaam1 si6, correspond: watch } 211 | - { term: 器, read: hei3, correspond: agent, space: no } 212 | zh-TW: 213 | 監視器: 214 | - { term: 監視, read: ㄐㄧㄢ ㄕˋ, correspond: watch } 215 | - { term: 器, read: ㄑㄧˋ, correspond: agent, space: no } 216 | 217 | # Transactional memory 218 | - en: 219 | transactional memory: 220 | - term: transactional 221 | - term: memory 222 | ja: 223 | transactional memory: 224 | - { term: トランザクショナル, loan: transactional } 225 | - { term: メモリ, loan: memory } 226 | ko: 227 | transactional memory: 228 | - { term: 트랜잭셔널, loan: transactional } 229 | - { term: 메모리, loan: memory } 230 | zh-CN: 231 | 事務內存: 232 | - { term: 事务, correspond: transactional, read: shì wù } 233 | - { term: 内存, correspond: memoery, read: nèi cún } 234 | zh-HK: 235 | 事務記憶體: 236 | - { term: 事務, correspond: transactional, read: si6 mou6 } 237 | - { term: 記憶體, correspond: memory, read: gei3 jik1 tai2 } 238 | zh-TW: 239 | 事務記憶體: 240 | - { term: 事務, correspond: transactional, read: ㄕˋ ㄨˋ } 241 | - { term: 記憶體, correspond: memory, read: ㄐㄧˋ ㄧˋ ㄊㄧˇ } 242 | -------------------------------------------------------------------------------- /tables/foss.yaml: -------------------------------------------------------------------------------- 1 | # Free software 2 | - en: 3 | free software: 4 | - term: free 5 | - term: software 6 | libre software: 7 | - { term: libre, correspond: free } 8 | - term: software 9 | ja: 10 | 自由 software: 11 | - { term: 自由, correspond: free, read: じ ゆう } 12 | - { term: ソフトウェア, loan: software } 13 | free software: 14 | - { term: フリー, loan: free } 15 | - { term: ソフトウェア, loan: software } 16 | ko: 17 | 自由 software: 18 | - { term: 自由, correspond: free, read: 자 유 } 19 | - { term: 소프트웨어, loan: software } 20 | zh-CN: 21 | 自由軟件: 22 | - { term: 自由, correspond: free, read: zì yóu } 23 | - { term: 软件, correspond: software, read: ruǎn jiàn } 24 | zh-HK: 25 | 自由軟件: 26 | - { term: 自由, correspond: free, read: zi6 jau4 } 27 | - { term: 軟件, correspond: software, read: jyun5 gin2 } 28 | zh-TW: 29 | 自由軟體: 30 | - { term: 自由, correspond: free, read: ㄗˋ ㄧㄡˊ } 31 | - { term: 軟體, correspond: software, read: ㄖㄨㄢˇ ㄊㄧˇ } 32 | 33 | # Open source software 34 | - en: 35 | open source software: 36 | - term: open 37 | - term: source 38 | - term: software 39 | ja: 40 | open source software: 41 | - { term: オープン, loan: open } 42 | - { term: ソース, loan: source } 43 | - { term: ソフトウェア, loan: software } 44 | ko: 45 | open source software: 46 | - { term: 오픈, loan: open } 47 | - { term: 소스, loan: source } 48 | - { term: 소프트웨어, loan: software } 49 | zh-CN: 50 | 開放源代碼軟件: 51 | - { term: 开放, correspond: open, read: kāi fàng } 52 | - { term: 源代码, correspond: source, read: yuán dài mǎ } 53 | - { term: 软件, correspond: software, read: ruǎn jiàn } 54 | 開源軟件: 55 | - { term: 开, correspond: open, read: kāi } 56 | - { term: 源, correspond: source, read: yuán } 57 | - { term: 软件, correspond: software, read: ruǎn jiàn } 58 | zh-HK: 59 | 開放原始碼軟件: 60 | - { term: 開放, correspond: open, read: hoi1 fong3 } 61 | - { term: 原始碼, correspond: source, read: jyun4 ci2 maa5 } 62 | - { term: 軟件, correspond: software, read: jyun5 gin2 } 63 | 開源軟件: 64 | - { term: 開, correspond: open, read: hoi1 } 65 | - { term: 源, correspond: source, read: jyun4 } 66 | - { term: 軟件, correspond: software, read: jyun5 gin2 } 67 | zh-TW: 68 | 開放原始碼軟體: 69 | - { term: 開放, correspond: open, read: ㄎㄞ ㄈㄤˋ } 70 | - { term: 原始碼, correspond: source, read: ㄩㄢˊ ㄕˇ ㄇㄚˇ } 71 | - { term: 軟體, correspond: software, read: ㄖㄨㄢˇ ㄊㄧˇ } 72 | 73 | # Software license 74 | - en: 75 | software license: 76 | - term: software 77 | - term: license 78 | ja: 79 | software license: 80 | - { term: ソフトウェア, loan: software } 81 | - { term: ライセンス, loan: license } 82 | ko: 83 | software license: 84 | - { term: 소프트웨어, loan: software } 85 | - { term: 라이선스, loan: license } 86 | software 使用權: 87 | - { term: 소프트웨어, loan: software } 88 | - { term: 使用權, correspond: license, read: 사 용 권 } 89 | zh-CN: 90 | 軟件許可證: 91 | - { term: 软件, correspond: software, read: ruǎn jiàn } 92 | - { term: 许可证, correspond: license, read: xǔ kě zhèng } 93 | zh-HK: 94 | 軟件特許條款: 95 | - { term: 軟件, correspond: software, read: jyun5 gin2 } 96 | - { term: 特許條款, correspond: license, read: dak6 heoi2 tiu4 fun2 } 97 | zh-TW: 98 | 軟體授權: 99 | - { term: 軟體, correspond: software, read: ㄖㄨㄢˇ ㄊㄧˇ } 100 | - { term: 授權, correspond: license, read: ㄕㄡˋ ㄑㄩㄢˊ } 101 | 102 | # Copyleft 103 | - en: 104 | copyleft: 105 | - term: copy 106 | - { term: left, space: no } 107 | ja: 108 | copyleft: 109 | - { term: コピー, loan: copy } 110 | - { term: レフト, loan: left, space: no } 111 | ko: 112 | copyleft: 113 | - { term: 카피, loan: copy } 114 | - { term: 레프트, loan: left, space: no } 115 | zh-CN: 116 | 反版權: 117 | - { term: 反, read: fǎn, correspond: anti } 118 | - { term: 版权, read: bǎn quán, correspond: copy, space: no } 119 | zh-HK: 120 | 著佐權: 121 | - { term: 著, read: zyu3, correspond: copy } 122 | - { term: 佐, read: zo2, correspond: left, space: no } 123 | - { term: 權, read: kyun4, correspond: copy, space: no } 124 | 反版權: 125 | - { term: 反, read: faan2, correspond: anti } 126 | - { term: 版權, read: baan2 kyun4, correspond: copy, space: no } 127 | zh-TW: 128 | 著佐權: 129 | - { term: 著, read: ㄓㄨˋ, correspond: copy } 130 | - { term: 佐, read: ㄗㄨㄛˇ, correspond: left, space: no } 131 | - { term: 權, read: ㄑㄩㄢˊ, correspond: copy, space: no } 132 | -------------------------------------------------------------------------------- /tables/paradigms.yaml: -------------------------------------------------------------------------------- 1 | # Imperative programming 2 | - en: 3 | imperative programming: 4 | - term: imperative 5 | - term: programming 6 | ja: 7 | 命令型 programming: 8 | - { term: 命令, read: めい れい, correspond: imperative } 9 | - { term: 型, read: がた, space: no, correspond: style } 10 | - { term: プログラミング, loan: programming } 11 | ko: 12 | 命令型 programming: 13 | - { term: 命令型, read: 명 령, correspond: imperative } 14 | - { term: 型, read: 형, space: no, correspond: style } 15 | - { term: 프로그래밍, loan: programming } 16 | zh-CN: 17 | 指令式編程: 18 | - { term: 指令, read: zhǐ lìng, correspond: imperative } 19 | - { term: 式, read: shì, correspond: style } 20 | - { term: 编程, read: biān chéng, correspond: programming } 21 | 命令式編程: 22 | - { term: 命令, read: mìng lìng, correspond: imperative } 23 | - { term: 式, read: shì, correspond: style } 24 | - { term: 编程, read: biān chéng, correspond: programming } 25 | zh-HK: 26 | 指令式編程: 27 | - { term: 指令, read: zi2 ling6, correspond: imperative } 28 | - { term: 式, read: sik1, correspond: style } 29 | - { term: 編程, read: pin1 cing4, correspond: programming } 30 | zh-TW: 31 | 指令式編程: 32 | - { term: 指令, read: ㄓˇ ㄌㄧㄥˋ, correspond: imperative } 33 | - { term: 式, read: ㄕˋ, correspond: style } 34 | - { term: 編程, read: ㄅㄧㄢ ㄔㄥˊ, correspond: programming } 35 | 36 | # Procedural programming 37 | - en: 38 | procedural programming: 39 | - { term: procedur, correspond: procedure } 40 | - { term: al, space: no, correspond: style } 41 | - term: programming 42 | ja: 43 | 手續き型 programming: 44 | - { term: 手続き, read: て つづ き, correspond: procedure } 45 | - { term: 型, read: がた, correspond: style } 46 | - { term: プログラミング, loan: programming } 47 | ko: 48 | 節次的 programming: 49 | - { term: 節次, read: 절 차, correspond: procedure } 50 | - { term: 的, read: 적, space: no, correspond: style } 51 | - { term: 프로그래밍, loan: programming } 52 | zh-CN: 53 | 過程式程序設計: 54 | - { term: 过程, read: guò chéng, correspond: procedure } 55 | - { term: 式, read: shì, correspond: style } 56 | - { term: 程序设计, read: chéng xù shè jì, correspond: programming } 57 | 過程式編程: 58 | - { term: 过程, read: guò chéng, correspond: procedure } 59 | - { term: 式, read: shì, correspond: style } 60 | - { term: 编程, read: biān chéng, correspond: programming } 61 | zh-HK: 62 | 程序式程式設計: 63 | - { term: 程序, read: cing4 zeoi6, correspond: procedure } 64 | - { term: 式, read: sik1, correspond: style } 65 | - { term: 程式設計, read: cing4 sik1 cit3 gai3, correspond: programming } 66 | zh-TW: 67 | 程序式程式設計: 68 | - { term: 程序, read: ㄔㄥˊ ㄒㄩˋ, correspond: procedural } 69 | - { term: 式, read: ㄕˋ, correspond: style } 70 | - { term: 程式設計, read: ㄔㄥˊ ㄕˋ ㄕㄜˋ ㄐㄧˋ, correspond: programming } 71 | 72 | # Object-oriented programming 73 | - en: 74 | object-oriented programming: 75 | - term: object 76 | - { term: oriented, space: hyphen } 77 | - term: programming 78 | ja: 79 | object 指向 programming: 80 | - { term: オブジェクト, loan: object } 81 | - { term: 指向, read: し こう, correspond: oriented } 82 | - { term: プログラミング, loan: programming } 83 | ko: 84 | 客體指向 programming: 85 | - { term: 客體, read: 객 체, correspond: object } 86 | - { term: 指向, read: 지 향, correspond: oriented } 87 | - { term: 프로그래밍, loan: programming } 88 | zh-CN: 89 | 面向對象程序設計: 90 | - { term: 面向, read: miàn xiàng, correspond: oriented } 91 | - { term: 对象, read: duì xiàng, correspond: object } 92 | - { term: 程序设计, read: chéng xù shè jì, correspond: programming } 93 | zh-HK: 94 | 物件導向程式設計: 95 | - { term: 物件, read: mat6 gin2, correspond: object } 96 | - { term: 導向, read: dou6 hoeng3, correspond: oriented } 97 | - { term: 程式設計, read: cing4 sik1 cit3 gai3, correspond: programming } 98 | zh-TW: 99 | 物件導向程式設計: 100 | - { term: 物件, read: ㄨˋ ㄐㄧㄢˋ, correspond: object } 101 | - { term: 導向, read: ㄉㄠˇ ㄒㄧㄤˋ, correspond: oriented } 102 | - { term: 程式設計, read: ㄔㄥˊ ㄕˋ ㄕㄜˋ ㄐㄧˋ, correspond: programming } 103 | 104 | # Declarative programming 105 | - en: 106 | declarative programming: 107 | - { term: declara, correspond: declare } 108 | - { term: tive, space: no, correspond: style } 109 | - term: programming 110 | ja: 111 | 宣言型 programming: 112 | - { term: 宣言, read: せん げん, correspond: declare } 113 | - { term: 型, read: がた, space: no, correspond: style } 114 | - { term: プログラミング, loan: programming } 115 | ko: 116 | 宣言型 programming: 117 | - { term: 宣言, read: 선 언, correspond: declare } 118 | - { term: 型, read: 형, space: no, correspond: style } 119 | - { term: 프로그래밍, loan: programming } 120 | 宣言的 programming: 121 | - { term: 宣言, read: 선 언, correspond: declare } 122 | - { term: 的, read: 적, space: no, correspond: style } 123 | - { term: 프로그래밍, loan: programming } 124 | zh-CN: 125 | 聲明式編程: 126 | - { term: 声明, read: shēng míng, correspond: declare } 127 | - { term: 式, read: shì, correspond: style } 128 | - { term: 编程, read: biān chéng, correspond: programming } 129 | zh-HK: 130 | 宣告式編程: 131 | - { term: 宣告, read: syun1 gou3, correspond: declare } 132 | - { term: 式, read: sik1, correspond: style } 133 | - { term: 編程, read: pin1 cing4, correspond: programming } 134 | zh-TW: 135 | 宣告式程式設計: 136 | - { term: 宣告, read: ㄒㄩㄢ ㄍㄠˋ, correspond: declare } 137 | - { term: 式, read: ㄕˋ, correspond: style } 138 | - { term: 程式設計, read: ㄔㄥˊ ㄕˋ ㄕㄜˋ ㄐㄧˋ, correspond: programming } 139 | 140 | # Functional programming 141 | - en: 142 | functional programming: 143 | - term: function 144 | - { term: al, space: no, correspond: style } 145 | - term: programming 146 | ja: 147 | 函數型 programming: 148 | - { term: 関数, read: かん すう, correspond: function } 149 | - { term: 型, read: がた, space: no, correspond: style } 150 | - { term: プログラミング, loan: programming } 151 | ko: 152 | 函數型 programming: 153 | - { term: 函數, read: 함 수, correspond: function } 154 | - { term: 型, read: 형, space: no, correspond: style } 155 | - { term: 프로그래밍, loan: programming } 156 | zh-CN: 157 | 函數式編程: 158 | - { term: 函数, read: hán shù, correspond: function } 159 | - { term: 式, read: shì, correspond: style } 160 | - { term: 编程, read: biān chéng, correspond: programming } 161 | zh-HK: 162 | 函數程式設計: 163 | - { term: 函數, read: haam4 sou3, correspond: function } 164 | - { term: 程式設計, read: cing4 sik1 cit3 gai3, correspond: programming } 165 | zh-TW: 166 | 函式程式設計: 167 | - { term: 函式, read: ㄏㄢˊ ㄕˋ, correspond: function } 168 | - { term: 程式設計, read: ㄔㄥˊ ㄕˋ ㄕㄜˋ ㄐㄧˋ, correspond: programming } 169 | 170 | # Logic programming 171 | - en: 172 | logic programming: 173 | - term: logic 174 | - term: programming 175 | ja: 176 | 論理 programming: 177 | - { term: 論理, read: ろん り, correspond: logic } 178 | - { term: プログラミング, loan: programming } 179 | ko: 180 | 論理型 programming: 181 | - { term: 論理, read: 논 리, correspond: logic } 182 | - { term: 型, read: 형, space: no, correspond: style } 183 | - { term: 프로그래밍, loan: programming } 184 | zh-CN: 185 | logic 編程: 186 | - { term: 逻辑, read: luó jí, loan: logic } 187 | - { term: 编程, read: biān chéng, correspond: programming } 188 | zh-HK: 189 | logic 編程: 190 | - { term: 邏輯, read: lo4 cap1, loan: logic } 191 | - { term: 編程, read: pin1 cing4, correspond: programming } 192 | zh-TW: 193 | logic 程式設計: 194 | - { term: 邏輯, read: ㄌㄨㄛˊ ㄐㄧˊ, loan: logic } 195 | - { term: 程式設計, read: ㄔㄥˊ ㄕˋ ㄕㄜˋ ㄐㄧˋ, correspond: programming } 196 | -------------------------------------------------------------------------------- /tables/programming.yaml: -------------------------------------------------------------------------------- 1 | # Computer programming 2 | - en: 3 | computer programming: 4 | - term: computer 5 | - term: programming 6 | programming: 7 | - term: programming 8 | ja: 9 | computer programming: 10 | - { term: コンピュータ, loan: computer } 11 | - { term: プログラミング, loan: programming } 12 | programming: 13 | - { term: プログラミング, loan: programming } 14 | ko: 15 | computer programming: 16 | - { term: 컴퓨터, loan: computer } 17 | - { term: 프로그래밍, loan: programming } 18 | programming: 19 | - { term: 프로그래밍, loan: programming } 20 | zh-CN: 21 | 計算機編程: 22 | - { term: 计算机, read: jì suàn jī, correspond: computer } 23 | - { term: 编程, read: biān chéng, correspond: programming } 24 | 程式設計: 25 | - { term: 程序, read: chéng xù, correspond: program } 26 | - { term: 设计, read: shè jì, correspond: design } 27 | zh-HK: 28 | 電腦程式編寫: 29 | - { term: 電腦, read: din6 nou5, correspond: computer } 30 | - { term: 程式, read: cing4 sik1, correspond: program } 31 | - { term: 編寫, read: pin1 se2, correspond: writing } 32 | 程式編寫: 33 | - { term: 程式, read: cing4 sik1, correspond: program } 34 | - { term: 編寫, read: pin1 se2, correspond: writing } 35 | zh-TW: 36 | 電腦程式設計: 37 | - { term: 電腦, read: ㄉㄧㄢˋ ㄋㄠˇ, correspond: computer } 38 | - { term: 程式, read: ㄔㄥˊ ㄕˋ, correspond: program } 39 | - { term: 設計, read: ㄕㄜˋ ㄐㄧˋ, correspond: design } 40 | 程式設計: 41 | - { term: 程式, read: ㄔㄥˊ ㄕˋ, correspond: program } 42 | - { term: 設計, read: ㄕㄜˋ ㄐㄧˋ, correspond: design } 43 | 44 | # Bug 45 | - en: 46 | bug: 47 | - term: bug 48 | ja: 49 | bug: 50 | - { term: バグ, loan: bug } 51 | ko: 52 | bug: 53 | - { term: 버그, loan: bug } 54 | zh-CN: 55 | 漏洞: 56 | - { term: 漏洞, correspond: hole, read: lòu dòng } 57 | 錯誤: 58 | - { term: 错误, correspond: mistake, read: cuò wù } 59 | zh-HK: 60 | 錯誤: 61 | - { term: 錯誤, correspond: mistake, read: co3 ng6 } 62 | zh-TW: 63 | 錯誤: 64 | - { term: 錯誤, correspond: mistake, read: ㄘㄨㄛˋ ㄨˋ } 65 | 66 | # Debug 67 | - en: 68 | debug: 69 | - { term: de, correspond: remove } 70 | - { term: bug, space: no } 71 | ja: 72 | debug: 73 | - { term: デ, correspond: remove, loan: de } 74 | - { term: バッグ, loan: bug, space: no } 75 | ko: 76 | debug: 77 | - { term: 디, correspond: remove, loan: de } 78 | - { term: 버그, loan: bug, space: no } 79 | zh-CN: 80 | 調試: 81 | - { term: 调, correspond: adjust, read: tiáo } 82 | - { term: 试, correspond: experiment, read: shì, space: no } 83 | zh-HK: 84 | 除錯: 85 | - { term: 除, correspond: remove, read: ceoi4 } 86 | - { term: 錯, correspond: bug, read: co3, space: no } 87 | zh-TW: 88 | 除錯: 89 | - { term: 除, correspond: remove, read: ㄔㄨˊ } 90 | - { term: 錯, correspond: bug, read: ㄘㄨㄛˋ, space: no } 91 | 偵錯: 92 | - { term: 偵, correspond: investigate, read: ㄓㄣ } 93 | - { term: 錯, correspond: bug, read: ㄘㄨㄛˋ, space: no } 94 | 95 | # Source code 96 | - en: 97 | source code: 98 | - term: source 99 | - term: code 100 | ja: 101 | source code: 102 | - { term: ソース, loan: source } 103 | - { term: コード, loan: code, space: no } 104 | ko: 105 | source code: 106 | - { term: 소스, loan: source } 107 | - { term: 코드, loan: code } 108 | 原始 코드: 109 | - { term: 原始, read: 원 시, correspond: source } 110 | - { term: 코드, loan: code } 111 | zh-CN: 112 | 源代碼: 113 | - { term: 源, read: yuán, correspond: source } 114 | - { term: 代码, read: dài mǎ, correspond: code } 115 | 源程序: 116 | - { term: 源, read: yuán, correspond: source } 117 | - { term: 程序, read: chéng xù, correspond: program } 118 | zh-HK: 119 | 原始碼: 120 | - { term: 原始, read: jyun4 ci2, correspond: source } 121 | - { term: 碼, read: maa5, correspond: code } 122 | 源代碼: 123 | - { term: 源, read: jyun4, correspond: source } 124 | - { term: 代碼, read: doi6 maa5, correspond: code } 125 | zh-TW: 126 | 原始碼: 127 | - { term: 原始, read: ㄩㄢˊ ㄕˇ, correspond: source } 128 | - { term: 碼, read: ㄇㄚˇ, correspond: code } 129 | 130 | # Flowchart 131 | - en: 132 | flowchart: 133 | - term: flow 134 | - { term: chart, space: no } 135 | ja: 136 | flowchart: 137 | - { term: フロー, loan: flow } 138 | - { term: チャート, loan: chart, space: no } 139 | 流れ圖: 140 | - { term: 流れ, read: なが れ, correspond: flow } 141 | - { term: 図, read: ず, correspond: chart, space: no } 142 | ko: 143 | flowchart: 144 | - { term: 플로, loan: flow } 145 | - { term: 차트, loan: chart } 146 | 順序圖: 147 | - { term: 順序, read: 순 서, correspond: flow } 148 | - { term: 圖, read: 도, correspond: chart, space: no } 149 | 흐름圖: 150 | - { term: 흐름, correspond: flow } 151 | - { term: 圖, read: 도, correspond: chart, space: no } 152 | zh-CN: 153 | 流程圖: 154 | - { term: 流程, read: liú chéng, correspond: flow } 155 | - { term: 图, read: tú, correspond: chart, space: no } 156 | zh-HK: 157 | 流程圖: 158 | - { term: 流程, read: lau4 cing4, correspond: flow } 159 | - { term: 圖, read: tou4, correspond: chart, space: no } 160 | zh-TW: 161 | 流程圖: 162 | - { term: 流程, read: ㄌㄧㄡˊ ㄔㄥˊ, correspond: flow } 163 | - { term: 圖, read: ㄊㄨˊ, correspond: chart, space: no } 164 | 165 | # Variable 166 | - en: 167 | value: 168 | - term: variable 169 | ja: 170 | 變數: 171 | - { term: 変, correspond: variable, read: へん } 172 | - { term: 数, correspond: number, read: すう, space: no } 173 | ko: 174 | 變數: 175 | - { term: 變, correspond: variable, read: 변 } 176 | - { term: 數, correspond: number, read: 수, space: no } 177 | zh-CN: 178 | 變量: 179 | - { term: 变, correspond: variable, read: biàn } 180 | - { term: 量, correspond: quantity, read: liàng, space: no } 181 | zh-HK: 182 | 變數: 183 | - { term: 變, correspond: variable, read: bin3 } 184 | - { term: 數, correspond: number, read: sou3, space: no } 185 | zh-TW: 186 | 變數: 187 | - { term: 變, correspond: variable, read: ㄅㄧㄢˋ } 188 | - { term: 數, correspond: number, read: ㄕㄨˋ, space: no } 189 | 190 | # Constant 191 | - en: 192 | value: 193 | - term: constant 194 | ja: 195 | 定數: 196 | - { term: 定, correspond: fixed, read: てい } 197 | - { term: 数, correspond: number, read: すう, space: no } 198 | ko: 199 | 常數: 200 | - { term: 常, correspond: constant, read: 상 } 201 | - { term: 數, correspond: number, read: 수, space: no } 202 | zh-CN: 203 | 常量: 204 | - { term: 常, correspond: constant, read: cháng } 205 | - { term: 量, correspond: quantity, read: liàng, space: no } 206 | zh-HK: 207 | 常數: 208 | - { term: 常, correspond: constant, read: soeng4 } 209 | - { term: 數, correspond: number, read: sou3, space: no } 210 | zh-TW: 211 | 常數: 212 | - { term: 常, correspond: constant, read: ㄔㄤˊ } 213 | - { term: 數, correspond: number, read: ㄕㄨˋ, space: no } 214 | 215 | # Value 216 | - en: 217 | value: 218 | - term: value 219 | ja: 220 | 値: 221 | - { term: 値, correspond: value, read: あたい } 222 | ko: 223 | 값: 224 | - { term: 값, correspond: value } 225 | zh-CN: 226 | 値: 227 | - { term: 値, correspond: value, read: zhí } 228 | zh-HK: 229 | 値: 230 | - { term: 値, correspond: value, read: zik6 } 231 | zh-TW: 232 | 値: 233 | - { term: 値, correspond: value, read: ㄓˊ } 234 | 235 | # Function 236 | - en: 237 | function: 238 | - term: function 239 | ja: 240 | 函數: 241 | - { term: 関, correspond: box, read: かん } 242 | - { term: 数, correspond: number, read: すう, space: no } 243 | ko: 244 | 函數: 245 | - { term: 函, correspond: box, read: 함 } 246 | - { term: 數, correspond: number, read: 수, space: no } 247 | zh-CN: 248 | 函數: 249 | - { term: 函, correspond: box, read: hán } 250 | - { term: 数, correspond: number, read: shù, space: no } 251 | zh-HK: 252 | 函數: 253 | - { term: 函, correspond: box, read: haam4 } 254 | - { term: 數, correspond: number, read: sou3, space: no } 255 | zh-TW: 256 | 函數: 257 | - { term: 函, correspond: box, read: ㄏㄢˊ } 258 | - { term: 數, correspond: number, read: ㄕㄨˋ, space: no } 259 | 函式: 260 | - { term: 函, correspond: box, read: ㄏㄢˊ } 261 | - { term: 式, correspond: style, read: ㄕˋ, space: no } 262 | 263 | # Return value 264 | - en: 265 | return value: 266 | - term: return 267 | - term: value 268 | ja: 269 | 戾り値: 270 | - { term: 戻り, correspond: return, read: もど り } 271 | - { term: 値, correspond: value, read: ち, space: no } 272 | 返り値: 273 | - { term: 返り, correspond: return, read: かえ り } 274 | - { term: 値, correspond: value, read: ち, space: no } 275 | 返卻値: 276 | - { term: 返却, correspond: return, read: へん きゃく } 277 | - { term: 値, correspond: value, read: ち, space: no } 278 | return 値: 279 | - { term: リターン, loan: return } 280 | - { term: 値, correspond: value, read: ち, space: no } 281 | ko: 282 | 返還값: 283 | - { term: 返還, correspond: return, read: 반 환 } 284 | - { term: 값, correspond: value, space: no } 285 | return 값: 286 | - { term: 리턴, loan: return } 287 | - { term: 값, correspond: value, space: no } 288 | zh-CN: 289 | 返回值: 290 | - { term: 返回, correspond: return, read: fǎn huí } 291 | - { term: 値, correspond: value, read: zhí, space: no } 292 | zh-HK: 293 | 傳回值: 294 | - { term: 傳回, correspond: return, read: cyun4 wui4 } 295 | - { term: 値, correspond: value, read: zik6, space: no } 296 | zh-TW: 297 | 傳回值: 298 | - { term: 傳回, correspond: return, read: ㄔㄨㄢˊ ㄏㄨㄟˊ } 299 | - { term: 値, correspond: value, read: ㄓˊ, space: no } 300 | 回傳值: 301 | - { term: 回傳, correspond: return, read: ㄏㄨㄟˊ ㄔㄨㄢˊ } 302 | - { term: 値, correspond: value, read: ㄓˊ, space: no } 303 | 304 | # Conditional statement 305 | - en: 306 | conditional statement: 307 | - term: conditional 308 | - term: statement 309 | ja: 310 | if 文: 311 | - { term: イフ, loan: if } 312 | - { term: 文, correspond: statement, read: ぶん } 313 | 條件文: 314 | - { term: 条件, correspond: conditional, read: じょう けん } 315 | - { term: 文, correspond: statement, read: ぶん } 316 | ko: 317 | if 文: 318 | - { term: 이프, loan: if } 319 | - { term: 文, correspond: statement, read: 문, space: no } 320 | 條件文: 321 | - { term: 條件, correspond: conditional, read: 조 건 } 322 | - { term: 文, correspond: statement, read: 문, space: no } 323 | zh-CN: 324 | 條件陳述: 325 | - { term: 条件, correspond: conditional, read: tiáo jiàn } 326 | - { term: 陈述, correspond: statement, read: chén shù } 327 | zh-HK: 328 | 條件陳述式: 329 | - { term: 條件, correspond: conditional, read: tiu4 gin2 } 330 | - { term: 陳述式, correspond: statement, read: can4 seot6 sik1 } 331 | zh-TW: 332 | 條件陳述: 333 | - { term: 條件, correspond: conditional, read: ㄊㄧㄠˊ ㄐㄧㄢˋ } 334 | - { term: 陳述式, correspond: statement, read: ㄔㄣˊ ㄕㄨˋ } 335 | 336 | # Recursion 337 | - en: 338 | recursion: 339 | - term: recursion 340 | ja: 341 | 再歸: 342 | - { term: 再帰, read: さい き } 343 | ko: 344 | 再歸: 345 | - { term: 再歸, read: 재 귀 } 346 | zh-CN: 347 | 遞歸: 348 | - { term: 递归, read: dì guī } 349 | zh-HK: 350 | 遞歸: 351 | - { term: 遞歸, read: dai6 gwai1 } 352 | zh-TW: 353 | 遞迴: 354 | - { term: 遞迴, read: ㄉㄧˋ ㄏㄨㄟˊ } 355 | 356 | # Infinite loop 357 | - en: 358 | infinite loop: 359 | - term: infinite 360 | - term: loop 361 | ja: 362 | 無限 loop: 363 | - { term: 無限, read: む げん, correspond: infinite } 364 | - { term: ループ, loan: loop } 365 | ko: 366 | 無限 loop: 367 | - { term: 無限, read: 무 한, correspond: infinite } 368 | - { term: 루프, loan: loop } 369 | zh-CN: 370 | 死循環: 371 | - { term: 死, read: sǐ, correspond: dead } 372 | - { term: 循环, read: xún huán, correspond: loop, space: no } 373 | 無限循環: 374 | - { term: 无限, read: wú xiàn, correspond: infinite } 375 | - { term: 循环, read: xún huán, correspond: loop } 376 | zh-HK: 377 | 無限迴圈: 378 | - { term: 無限, read: mou4 haan6, correspond: infinite } 379 | - { term: 迴圈, read: wui4 hyun1, correspond: loop } 380 | zh-TW: 381 | 無窮迴圈: 382 | - { term: 無窮, read: ㄨˊ ㄑㄩㄥˊ, correspond: infinite } 383 | - { term: 迴圈, read: ㄏㄨㄟˊ ㄑㄩㄢ, correspond: loop } 384 | 無限迴圈: 385 | - { term: 無限, read: ㄨˊ ㄒㄧㄢˋ, correspond: infinite } 386 | - { term: 迴圈, read: ㄏㄨㄟˊ ㄑㄩㄢ, correspond: loop } 387 | 388 | # vim: set et sw=2 ts=2 sts=2 ft=yaml: 389 | -------------------------------------------------------------------------------- /tables/studies.yaml: -------------------------------------------------------------------------------- 1 | # Computer science 2 | - en: 3 | computer science: 4 | - term: computer 5 | - term: science 6 | ja: 7 | computer 科學: 8 | - { term: コンピュータ, loan: computer } 9 | - { term: 科学, read: か がく, correspond: science } 10 | 計算機科學: 11 | - { term: 計算機, read: けい さん き, correspond: computer } 12 | - { term: 科学, read: か がく, correspond: science } 13 | ko: 14 | computer 科學: 15 | - { term: 컴퓨터, loan: computer } 16 | - { term: 科學, read: 과 학, correspond: science } 17 | 電算學: 18 | - { term: 電算, read: 전 산, correspond: computer } 19 | - { term: 學, read: 학, space: no } 20 | zh-CN: 21 | 計算機科學: 22 | - { term: 计算机, read: jì suàn jī, correspond: computer } 23 | - { term: 科学, read: kē xué, correspond: science } 24 | zh-HK: 25 | 電腦科學: 26 | - { term: 電腦, read: din6 nou5, correspond: computer } 27 | - { term: 科學, read: fo1 hok6, correspond: science } 28 | zh-TW: 29 | 電腦科學: 30 | - { term: 電腦, read: ㄉㄧㄢˋ ㄋㄠˇ, correspond: computer } 31 | - { term: 科學, read: ㄎㄜ ㄒㄩㄝˊ, correspond: science } 32 | 33 | # Computational science 34 | - en: 35 | computational science: 36 | - { term: computational, correspond: computation } 37 | - term: science 38 | ja: 39 | 計算科學: 40 | - { term: 計算, read: けい さん, correspond: computation } 41 | - { term: 科学, read: か がく, correspond: science } 42 | ko: 43 | 計算科學: 44 | - { term: 計算, read: 계 산, correspond: computation } 45 | - { term: 科學, read: 과 학, correspond: science } 46 | zh-CN: 47 | 計算科學: 48 | - { term: 计算, read: jì suàn, correspond: computation } 49 | - { term: 科学, read: kē xué, correspond: science } 50 | zh-HK: 51 | 計算科學: 52 | - { term: 計算, read: gai3 syun3, correspond: computation } 53 | - { term: 科學, read: fo1 hok6, correspond: science } 54 | 運算科學: 55 | - { term: 運算, read: wan6 syun3, correspond: computation } 56 | - { term: 科學, read: fo1 hok6, correspond: science } 57 | zh-TW: 58 | 計算科學: 59 | - { term: 計算, read: ㄐㄧˋ ㄙㄨㄢˋ, correspond: computation } 60 | - { term: 科學, read: ㄎㄜ ㄒㄩㄝˊ, correspond: science } 61 | 62 | # Theory of computation 63 | - en: 64 | theory of computation: 65 | - term: theory 66 | - term: of 67 | - term: computation 68 | ja: 69 | 計算理論: 70 | - { term: 計算, read: けい さん, correspond: computation } 71 | - { term: 理論, read: り ろん, correspond: theory } 72 | ko: 73 | 計算理論: 74 | - { term: 計算, read: 계 산, correspond: computation } 75 | - { term: 理論, read: 이 론, correspond: theory } 76 | zh-CN: 77 | 計算理論: 78 | - { term: 计算, read: jì suàn, correspond: computation } 79 | - { term: 理论, read: lǐ lùn, correspond: theory } 80 | zh-HK: 81 | 計算理論: 82 | - { term: 計算, read: gai3 syun3, correspond: computation } 83 | - { term: 理論, read: lei5 leon6, correspond: theory } 84 | 運算理論: 85 | - { term: 運算, read: wan6 syun3, correspond: computation } 86 | - { term: 理論, read: lei5 leon6, correspond: theory } 87 | zh-TW: 88 | 計算理論: 89 | - { term: 計算, read: ㄐㄧˋ ㄙㄨㄢˋ, correspond: computation } 90 | - { term: 理論, read: ㄌㄧˇ ㄌㄨㄣˋ, correspond: theory } 91 | 92 | # Computer engineering 93 | - en: 94 | computer engineering: 95 | - term: computer 96 | - term: engineering 97 | ja: 98 | 計算機工學: 99 | - { term: 計算機, read: けい さん き, correspond: computer } 100 | - { term: 工学, read: こう がく, correspond: engineering } 101 | computer 工學: 102 | - { term: コンピュータ, loan: computer } 103 | - { term: 工学, read: こう がく, correspond: engineering } 104 | ko: 105 | computer 工學: 106 | - { term: 컴퓨터, loan: computer } 107 | - { term: 工學, read: 공 학, correspond: engineering } 108 | zh-CN: 109 | 計算機工程: 110 | - { term: 计算机, read: jì suàn jī, correspond: computer } 111 | - { term: 工程, read: gōng chéng, correspond: engineering } 112 | zh-HK: 113 | 電腦工程: 114 | - { term: 電腦, read: din6 nou5, correspond: computer } 115 | - { term: 工程, read: gung1 cing4, correspond: engineering } 116 | 計算機工程: 117 | - { term: 計算機, read: gai3 syun3 gei1, correspond: computer } 118 | - { term: 工程, read: gung1 cing4, correspond: engineering } 119 | zh-TW: 120 | 電腦工程: 121 | - { term: 電腦, read: ㄉㄧㄢˋ ㄋㄠˇ, correspond: computer } 122 | - { term: 工程, read: ㄍㄨㄥ ㄔㄥˊ, correspond: engineering } 123 | 124 | # Software engineering 125 | - en: 126 | software engineering: 127 | - term: software 128 | - term: engineering 129 | ja: 130 | software 工學: 131 | - { term: ソフトウェア, loan: software } 132 | - { term: 工学, read: こう がく, correspond: engineering } 133 | ko: 134 | "software 工學": 135 | - { term: 소프트웨어, loan: software } 136 | - { term: 工學, read: 공 학, correspond: engineering } 137 | zh-CN: 138 | 軟件工程: 139 | - { term: 软件, read: ruǎn jiàn, correspond: software } 140 | - { term: 工程, read: gōng chéng, correspond: engineering } 141 | zh-HK: 142 | 軟件工程: 143 | - { term: 軟件, read: jyun5 gin2, correspond: software } 144 | - { term: 工程, read: gung1 cing4, correspond: engineering } 145 | zh-TW: 146 | 軟體工程: 147 | - { term: 軟體, read: ㄖㄨㄢˇ ㄊㄧˇ, correspond: software } 148 | - { term: 工程, read: ㄍㄨㄥ ㄔㄥˊ, correspond: engineering } 149 | 150 | # Artificial intelligence 151 | - en: 152 | artificial intelligence: 153 | - term: artificial 154 | - term: intelligence 155 | ja: 156 | 人工智能: 157 | - { term: 人工, read: じん こう, correspond: artificial } 158 | - { term: 知能, read: ち のう, correspond: intelligence } 159 | ko: 160 | 人工智能: 161 | - { term: 人工, read: 인 공, correspond: artificial } 162 | - { term: 知能, read: 지 능, correspond: intelligence } 163 | zh-CN: 164 | 人工智能: 165 | - { term: 人工, read: rén gōng, correspond: artificial } 166 | - { term: 智能, read: zhì néng, correspond: intelligence } 167 | zh-HK: 168 | 人工智能: 169 | - { term: 人工, read: jan4 gung1, correspond: artificial } 170 | - { term: 智能, read: zi3 nang4, correspond: intelligence } 171 | zh-TW: 172 | 人工智慧: 173 | - { term: 人工, read: ㄖㄣˊ ㄍㄨㄥ, correspond: artificial } 174 | - { term: 智慧, read: ㄓˋ ㄏㄨㄟˋ, correspond: intelligence } 175 | 176 | # Computer security 177 | - en: 178 | computer security: 179 | - term: computer 180 | - term: security 181 | information technology security: 182 | - term: information 183 | - term: technology 184 | - term: security 185 | ja: 186 | computer security: 187 | - { term: コンピュータ, loan: computer } 188 | - { term: セキュリティ, loan: security } 189 | ko: 190 | 컴퓨터 保安: 191 | - { term: 컴퓨터, loan: computer } 192 | - { term: 保安, read: 보 안, correspond: security } 193 | 情報技術保安: 194 | - { term: 情報, read: 정 보, correspond: information } 195 | - { term: 技術, read: 기 술, correspond: technology } 196 | - { term: 保安, read: 보 안, correspond: security } 197 | zh-CN: 198 | 计算机安全: 199 | - { term: 计算机, read: jì suàn jī, correspond: computer } 200 | - { term: 安全, read: ān quán, correspond: security } 201 | zh-HK: 202 | 電腦保安: 203 | - { term: 電腦, read: din6 nou5, correspond: computer } 204 | - { term: 保安, read: bou2 on1, correspond: security } 205 | zh-TW: 206 | 電腦安全: 207 | - { term: 電腦, read: ㄉㄧㄢˋ ㄋㄠˇ, correspond: computer } 208 | - { term: 安全, read: ㄢ ㄑㄩㄢˊ, correspond: security } 209 | 210 | # Cryptography 211 | - en: 212 | cryptography: 213 | - term: crypto 214 | - { term: graphy, space: no } 215 | cryptology: 216 | - term: crypto 217 | - { term: logy, space: no, correspond: study } 218 | ko: 219 | 暗號學: 220 | - { term: 暗號, read: 암 호, correspond: crypto } 221 | - { term: 學, read: 학, correspond: study, space: no } 222 | 暗號理論: 223 | - { term: 暗號, read: 암 호, correspond: crypto } 224 | - { term: 理論, read: 이 론, correspond: theory } 225 | ja: 226 | 暗號學: 227 | - { term: 暗号, read: あん ごう, correspond: crypto } 228 | - { term: 学, read: がく, correspond: study, space: no } 229 | 暗號理論: 230 | - { term: 暗号, read: あん ごう, correspond: crypto } 231 | - { term: 理論, read: り ろん, correspond: theory } 232 | zh-CN: 233 | 密碼學: 234 | - { term: 密码, read: mì mǎ, correspond: crypto } 235 | - { term: 学, read: xué, correspond: study, space: no } 236 | zh-HK: 237 | 密碼學: 238 | - { term: 密碼, read: mat6 maa5, correspond: crypto } 239 | - { term: 學, read: hok6, correspond: study, space: no } 240 | zh-TW: 241 | 密碼學: 242 | - { term: 密碼, read: ㄇㄧˋ ㄇㄚˇ, correspond: crypto } 243 | - { term: 學, read: ㄒㄩㄝˊ, correspond: study, space: no } 244 | 245 | # vim: set et sw=2 ts=2 sts=2 ft=yaml: 246 | -------------------------------------------------------------------------------- /tables/theory-comp.yaml: -------------------------------------------------------------------------------- 1 | # Algorithm 2 | - en: 3 | algorithm: 4 | - term: algorithm 5 | ja: 6 | algorithm: 7 | - { term: アルゴリズム, loan: algorithm } 8 | ko: 9 | algorithm: 10 | - { term: 알고리즘, loan: algorithm } 11 | zh-CN: 12 | 算法: 13 | - { term: 算, read: suàn, correspond: calculate } 14 | - { term: 法, read: fǎ, correspond: method, space: no } 15 | zh-HK: 16 | 演算法: 17 | - { term: 演算, read: jin2 syun3, correspond: calculate } 18 | - { term: 法, read: faat3, correspond: method, space: no } 19 | 算法: 20 | - { term: 算, read: syun3, correspond: calculate } 21 | - { term: 法, read: faat3, correspond: method, space: no } 22 | zh-TW: 23 | 演算法: 24 | - { term: 演算, read: ㄧㄢˇ ㄙㄨㄢˋ, correspond: calculate } 25 | - { term: 法, read: ㄈㄚˇ, correspond: method, space: no } 26 | 27 | # Turing completeness 28 | - en: 29 | "Turing completeness": 30 | - term: Turing 31 | - term: completeness 32 | ja: 33 | "Turing 完全性": 34 | - { term: チューリング, loan: Turing } 35 | - { term: 完全性, read: かん ぜん せい, correspond: completeness } 36 | ko: 37 | "Turing 完全性": 38 | - { term: 튜링, loan: Turing } 39 | - { term: 完全性, read: 완 전 성, correspond: completeness } 40 | zh-CN: 41 | "Turing 完備性": 42 | - { term: 图灵, loan: Turing } 43 | - { term: 完备性, read: wán bèi xìng, correspond: completeness } 44 | zh-HK: 45 | "Turing 完整性": 46 | - { term: 圖靈, loan: Turing } 47 | - { term: 完整性, read: jyun4 zing2 sing3, correspond: completeness } 48 | zh-TW: 49 | "Turing 完備性": 50 | - { term: 圖靈, loan: Turing } 51 | - { term: 完備性, read: ㄨㄢˊ ㄅㄟˋ ㄒㄧㄥˋ, correspond: completeness } 52 | 53 | # Decision problem 54 | - en: 55 | "decision problem": 56 | - term: decision 57 | - term: problem 58 | ja: 59 | 決定問題: 60 | - { term: 決定, read: けっ てい, correspond: decision } 61 | - { term: 問題, read: もん だい, correspond: problem } 62 | 判定問題: 63 | - { term: 判定, read: はん てい, correspond: decision } 64 | - { term: 問題, read: もん だい, correspond: problem } 65 | ko: 66 | 決定問題: 67 | - { term: 決定, read: 결 정, correspond: decision } 68 | - { term: 問題, read: 문 제, correspond: problem } 69 | 判定問題: 70 | - { term: 判定, read: 판 정, correspond: decision } 71 | - { term: 問題, read: 문 제, correspond: problem } 72 | zh-CN: 73 | 決定性問題: 74 | - { term: 决定性, read: jué dìng xìng, correspond: decision } 75 | - { term: 问题, read: wèn tí, correspond: problem } 76 | 判定問題: 77 | - { term: 判定, read: pàn dìng, correspond: decision } 78 | - { term: 问题, read: wèn tí, correspond: problem } 79 | zh-HK: 80 | 決定性問題: 81 | - { term: 決定性, read: kyut3 ding6 sing3, correspond: decision } 82 | - { term: 問題, read: man6 tai4, correspond: problem } 83 | 判定問題: 84 | - { term: 判定, read: pun3 ding6, correspond: decision } 85 | - { term: 問題, read: man6 tai4, correspond: problem } 86 | zh-TW: 87 | 決定性問題: 88 | - { term: 決定性, read: ㄐㄩㄝˊ ㄉㄧㄥˋ ㄒㄧㄥˋ, correspond: decision } 89 | - { term: 問題, read: ㄨㄣˋ ㄊㄧˊ, correspond: problem } 90 | 判定問題: 91 | - { term: 判定, read: ㄆㄢˋ ㄉㄧㄥˋ, correspond: decision } 92 | - { term: 問題, read: ㄨㄣˋ ㄊㄧˊ, correspond: problem } 93 | 94 | # vim: set et sw=2 ts=2 sts=2 ft=yaml: 95 | -------------------------------------------------------------------------------- /tables/tools.yaml: -------------------------------------------------------------------------------- 1 | # Editor 2 | - en: 3 | editor: 4 | - term: edit 5 | - { term: or, space: no } 6 | ja: 7 | editor: 8 | - { term: エディタ, loan: editor } 9 | ko: 10 | editor: 11 | - { term: 에디터, loan: editor } 12 | 編輯器: 13 | - { term: 編輯, correspond: edit, read: 편 집 } 14 | - { term: 機, correspond: or, read: 기, space: no } 15 | zh-CN: 16 | 編輯器: 17 | - { term: 编辑, correspond: edit, read: biān jí } 18 | - { term: 器, correspond: or, read: qì, space: no } 19 | zh-HK: 20 | 編輯器: 21 | - { term: 編輯, correspond: edit, read: pin1 cap1 } 22 | - { term: 器, correspond: or, read: hei3, space: no } 23 | zh-TW: 24 | 編輯器: 25 | - { term: 編輯, correspond: edit, read: ㄅㄧㄢ ㄐㄧˊ } 26 | - { term: 器, correspond: or, read: ㄑㄧˋ, space: no } 27 | 28 | # Compiler 29 | - en: 30 | compiler: 31 | - { term: compil, correspond: compile } 32 | - { term: er, space: no } 33 | ja: 34 | compiler: 35 | - { term: コンパイラ, loan: compiler } 36 | ko: 37 | compiler: 38 | - { term: 컴파일러, loan: compiler } 39 | zh-CN: 40 | 編譯器: 41 | - { term: 编译, correspond: compile, read: biān yì } 42 | - { term: 器, correspond: er, read: qì, space: no } 43 | zh-HK: 44 | 編譯器: 45 | - { term: 編譯, correspond: compile, read: pin1 jik6 } 46 | - { term: 器, correspond: er, read: hei3, space: no } 47 | zh-TW: 48 | 編譯器: 49 | - { term: 編譯, correspond: compile, read: ㄅㄧㄢ ㄧˋ } 50 | - { term: 器, correspond: er, read: ㄑㄧˋ, space: no } 51 | 52 | # Decompiler 53 | - en: 54 | decompiler: 55 | - term: de 56 | - { term: compiler, space: no } 57 | ja: 58 | 逆 compiler: 59 | - { term: 逆, correspond: de, read: ぎゃく } 60 | - { term: コンパイラ, loan: compiler } 61 | ko: 62 | decompiler: 63 | - { term: 디, loan: de } 64 | - { term: 컴파일러, loan: compiler, space: no } 65 | 逆 compiler: 66 | - { term: 逆, correspond: de, read: 역 } 67 | - { term: 컴파일러, loan: compiler, space: no } 68 | zh-CN: 69 | 反編譯器: 70 | - { term: 反, correspond: de, read: fǎn } 71 | - { term: 编译器, correspond: compiler, read: biān yì qì, space: no } 72 | zh-HK: 73 | 反編譯器: 74 | - { term: 反, correspond: de, read: faan2 } 75 | - { term: 編譯器, correspond: compiler, read: pin1 jik6 hei3, space: no } 76 | zh-TW: 77 | 反編譯器: 78 | - { term: 反, correspond: de, read: ㄈㄢˇ } 79 | - { term: 編譯器, correspond: compiler, read: ㄅㄧㄢ ㄧˋ ㄑㄧˋ, space: no } 80 | 81 | # Transpiler 82 | - en: 83 | transpiler: 84 | - term: trans 85 | - { term: piler, correspond: compiler, space: no } 86 | ja: 87 | transpiler: 88 | - { term: トランス, loan: trans } 89 | - { term: パイラ, loan: piler, correspond: compiler, space: no } 90 | ko: 91 | transpiler: 92 | - { term: 트랜스, loan: trans } 93 | - { term: 파일러, loan: piler, correspond: compiler, space: no } 94 | zh-CN: 95 | 轉譯器: 96 | - { term: 转, correspond: trans, read: zhuǎn } 97 | - { term: 译器, correspond: compiler, read: yì qì, space: no } 98 | zh-HK: 99 | 轉譯器: 100 | - { term: 轉, correspond: trans, read: zyun2 } 101 | - { term: 譯器, correspond: compiler, read: jik6 hei3, space: no } 102 | zh-TW: 103 | 轉譯器: 104 | - { term: 轉, correspond: trans, read: ㄓㄨㄢˇ } 105 | - { term: 譯器, correspond: compiler, read: ㄧˋ ㄑㄧˋ, space: no } 106 | 107 | # Debugger 108 | - en: 109 | debugger: 110 | - { term: debugg, correspond: debug } 111 | - { term: er, space: no } 112 | ja: 113 | debugger: 114 | - { term: デバッガ, loan: debugger } 115 | ko: 116 | debugger: 117 | - { term: 디버거, loan: debugger } 118 | zh-CN: 119 | 調試工具: 120 | - { term: 调试, correspond: debug, read: tiáo shì } 121 | - { term: 工具, correspond: er, read: gōng jù } 122 | 調試器: 123 | - { term: 调试, correspond: debug, read: tiáo shì } 124 | - { term: 器, correspond: er, read: qì, space: no } 125 | zh-HK: 126 | 除錯工具: 127 | - { term: 除錯, correspond: debug, read: ceoi4 co3 } 128 | - { term: 工具, correspond: er, read: gung1 geoi6 } 129 | 除錯器: 130 | - { term: 除錯, correspond: debug, read: ceoi4 co3 } 131 | - { term: 器, correspond: er, read: hei3, space: no } 132 | zh-TW: 133 | 除錯工具: 134 | - { term: 除錯, correspond: debug, read: ㄔㄨˊ ㄘㄨㄛˋ } 135 | - { term: 工具, correspond: er, read: ㄍㄨㄥ ㄐㄩˋ } 136 | 除錯器: 137 | - { term: 除錯, correspond: debug, read: ㄔㄨˊ ㄘㄨㄛˋ } 138 | - { term: 器, correspond: er, read: ㄑㄧˋ, space: no } 139 | 140 | # IDE 141 | - en: 142 | integrated development environment: 143 | - term: integrated 144 | - term: development 145 | - term: environment 146 | ja: 147 | 統合開發環境: 148 | - { term: 統合, correspond: integrated, read: とう ごう } 149 | - { term: 開発, correspond: development, read: かい はつ } 150 | - { term: 環境, correspond: environment, read: かん きょう } 151 | ko: 152 | 統合開發環境: 153 | - { term: 統合, correspond: integrated, read: 통 합 } 154 | - { term: 開發, correspond: development, read: 개 발 } 155 | - { term: 環境, correspond: environment, read: 환 경 } 156 | zh-CN: 157 | 集成開發環境: 158 | - { term: 集成, correspond: integrated, read: jí chéng } 159 | - { term: 开发, correspond: development, read: kāi fā } 160 | - { term: 环境, correspond: environment, read: huán jìng } 161 | zh-HK: 162 | 整合開發環境: 163 | - { term: 整合, correspond: integrated, read: zing2 hap6 } 164 | - { term: 開發, correspond: development, read: hoi1 faat3 } 165 | - { term: 環境, correspond: environment, read: waan4 ging2 } 166 | zh-TW: 167 | 整合開發環境: 168 | - { term: 整合, correspond: integrated, read: ㄓㄥˇ ㄏㄜˊ } 169 | - { term: 開發, correspond: development, read: ㄎㄞ ㄈㄚ } 170 | - { term: 環境, correspond: environment, read: ㄏㄨㄢˊ ㄐㄧㄥˋ } 171 | 172 | # vim: set et sw=2 ts=2 sts=2 ft=yaml: 173 | -------------------------------------------------------------------------------- /tables/units.yaml: -------------------------------------------------------------------------------- 1 | # Bit 2 | - en: 3 | bit: 4 | - term: bit 5 | ja: 6 | bit: 7 | - { term: ビット, loan: bit } 8 | ko: 9 | bit: 10 | - { term: 비트, loan: bit } 11 | zh-CN: 12 | bit: 13 | - { term: 比特, loan: bit } 14 | zh-HK: 15 | 位元: 16 | - { term: 位元, read: wai6 jyun4 } 17 | zh-TW: 18 | 位元: 19 | - { term: 位元, read: ㄨㄟˋ ㄩㄢˊ } 20 | 21 | # Byte 22 | - en: 23 | byte: 24 | - term: byte 25 | ja: 26 | byte: 27 | - { term: バイト, loan: byte } 28 | ko: 29 | byte: 30 | - { term: 바이트, loan: byte } 31 | zh-CN: 32 | 字節: 33 | - { term: 字, correspond: word, read: zì } 34 | - { term: 节, correspond: segment, read: jié, space: no } 35 | zh-HK: 36 | 位元組: 37 | - { term: 位元, correspond: bit, read: wai6 jyun4 } 38 | - { term: 組, correspond: group, read: zou2, space: no } 39 | zh-TW: 40 | 位元組: 41 | - { term: 位元, correspond: bit, read: ㄨㄟˋ ㄩㄢˊ } 42 | - { term: 組, correspond: group, read: ㄗㄨˇ, space: no } 43 | 44 | # Octet 45 | - en: 46 | octet: 47 | - term: octet 48 | ja: 49 | octet: 50 | - { term: オクテット, loan: octet } 51 | ko: 52 | octet: 53 | - { term: 옥텟, loan: octet } 54 | zh-CN: 55 | 八字節: 56 | - { term: 八, correspond: eight, read: bā } 57 | - { term: 字节, correspond: byte, read: zì jié, space: no } 58 | zh-HK: 59 | 八位元組: 60 | - { term: 八, correspond: eight, read: baat3 } 61 | - { term: 位元組, correspond: byte, read: wai6 jyun4 zou2, space: no } 62 | zh-TW: 63 | 八位元組: 64 | - { term: 八, correspond: eight, read: ㄅㄚ } 65 | - { term: 位元組, correspond: byte, read: ㄨㄟˋ ㄩㄢˊ ㄗㄨˇ, space: no } 66 | 67 | # Word 68 | - en: 69 | word: 70 | - term: word 71 | ja: 72 | word: 73 | - { term: ワード, loan: word } 74 | ko: 75 | word: 76 | - { term: 워드, loan: word } 77 | zh-CN: 78 | 字: 79 | - { term: 字, correspond: word, read: zì } 80 | zh-HK: 81 | 字: 82 | - { term: 字, correspond: word, read: zi6 } 83 | 字組: 84 | - { term: 字, correspond: character, read: zi6 } 85 | - { term: 組, correspond: group, read: zou2 } 86 | zh-TW: 87 | 字: 88 | - { term: 字, correspond: word, read: ㄗˋ } 89 | 字組: 90 | - { term: 字, correspond: character, read: ㄗˋ } 91 | - { term: 組, correspond: group, read: ㄗㄨˇ } 92 | 93 | # vim: set et sw=2 ts=2 sts=2 ft=yaml: 94 | -------------------------------------------------------------------------------- /templates/layout.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | {{ title }} 7 | 8 | 9 | 10 | 11 | 12 |
13 | 30 |
31 | {{- doc -}} 32 | 33 | 34 | {# vim: set et sw=2 ts=2 sts=2 ft=jinja: #} 35 | -------------------------------------------------------------------------------- /templates/table.html: -------------------------------------------------------------------------------- 1 | {% macro cell(th_if, attrs={}, class={}) -%} 2 | {%- with class_ = (class|dictselect|xmlattr ~ ' ' ~ 3 | attrs.get('class', ''))|trim, 4 | attrs_ = dict(attrs) %} 5 | {% do attrs_.update(class=class_ or none) %} 6 | {%- if th_if -%} 7 | {%- else -%} 8 | {%- endif -%} 9 | {%- endwith -%} 10 | {{- caller() -}} 11 | {%- if th_if -%} 12 | {%- else -%} 13 | {%- endif -%} 14 | {%- endmacro %} 15 | 16 | {% macro word_span(word, locale, translation, table) -%} 17 | {%- for term in word -%} 18 | {%- with classes = 'term ' + ( 19 | 'correspond-' ~ (translation.correspondences.index(term.correspond)+1) 20 | if term.correspond in translation.correspondences 21 | else '' 22 | ) -%} 23 | {{- term.space|string -}} 24 | {%- if (word|selectattr('read')|list + 25 | word|selectattr('loan')|list)|length -%} 26 | 27 | {%- if term.loan -%} 28 | {{- term.term -}} 29 | {{ term.loan }} 30 | {%- elif term.read_as is not undefined and 31 | term.read_as is callable -%} 32 | {%- for char, read in term.read_as(word.locale, 33 | locale, 34 | word.get_previous_terms(term), 35 | word.id, 36 | translation, 37 | table) -%} 38 | {{- char -}} 39 | {{ read if char != read }} 40 | {%- endfor -%} 41 | {%- else -%} 42 | {{- term.term -}} 43 | 44 | {%- endif -%} 45 | 46 | {%- else -%} 47 | 48 | {{- term.term -}} 49 | 50 | {%- endif -%} 51 | {%- endwith -%} 52 | {%- endfor %} 53 | {%- endmacro %} 54 | 55 |
56 | 60 | 61 | 62 | {% for lang in locales.values() %} 63 | {% call cell(loop.first, { 64 | 'colspan': lang|length - 1 if lang is mapping, 65 | 'rowspan': 2 if lang is not mapping, 66 | }) -%} 67 | {%- with lang_ = lang._ if lang is mapping else lang -%} 68 | {{- lang_.get_display_name(locale) }} 69 | {% if lang_.get_display_name(locale) != lang_.get_display_name() %} 70 | 71 | ( 72 | {{- lang_.get_display_name() -}} 73 | ) 74 | 75 | {% endif %} 76 | {% endwith %} 77 | {% endcall %} 78 | {% endfor %} 79 | 80 | 81 | {% for locales in locales.values() if locales is mapping %} 82 | {% for localecode, l in locales.items() if localecode != '_' %} 83 | 93 | {% endfor %} 94 | {% endfor %} 95 | 96 | 97 | 98 | {% for translation in table %} 99 | {% for tr_idx in range(translation.max_words) %} 100 | {% with cognate_groups = translation.cognate_groups|list %} 101 | 107 | {% for lval in locales.values() %} 108 | {% with locales_loop = loop, 109 | lmap = lval if lval is mapping else {lval|string: lval} %} 110 | {% for lcode, lobj in lmap.items() if lcode != '_' %} 111 | {% with words = translation.get(lobj, []) %} 112 | {% if tr_idx < words|length %} 113 | {% with word = words[tr_idx] %} 114 | {% call cell(locales_loop.first, { 115 | 'rowspan': translation.max_words - tr_idx 116 | if (translation.max_words > words|length and 117 | tr_idx + 1 >= words|length), 118 | 'class': ('cognate-group-' ~ 119 | (cognate_groups.index(word.id) + 1)) 120 | if word.id in cognate_groups, 121 | }) %} 122 | {{ word_span(word, locale, translation, table) }} 123 | {% if word.locale.language != 'en' %} 124 | {% with (langtag, rom) = word.romanize() %} 125 | ({{ rom }}) 129 | {% endwith %} 130 | {% endif %} 131 | {% endcall %} 132 | {% endwith %} 133 | {% endif %} 134 | {% endwith %} 135 | {% endfor %} 136 | {% endwith %} 137 | {% endfor %} 138 | 139 | {% endwith %} 140 | {% endfor %} 141 | {% endfor %} 142 | 143 |
84 | {{ l|territory_name(locale) }} 85 | {% if l|territory_name(locale) != l|territory_name(l) %} 86 | 87 | ( 88 | {{- l|territory_name(l) -}} 89 | ) 90 | 91 | {% endif %} 92 |
144 |
145 | 146 | {# vim: set et sw=2 ts=2 sts=2 ft=jinja: #} 147 | -------------------------------------------------------------------------------- /zh-Hant.md: -------------------------------------------------------------------------------- 1 | 中日韓電腦科學術語對照 2 | ====================== 3 | 4 | [![GitHub](https://img.shields.io/github/stars/dahlia/cjk-compsci-terms?style=social)][GitHub] 5 | [![Netlify](https://api.netlify.com/api/v1/badges/2ae1a16c-e345-4863-90c0-080e520855a5/deploy-status)][Netlify] 6 | [![創用CC授權條款](cc-by-sa.svg)][CC BY-SA 4.0] 7 | [![GitHub Sponsors](https://img.shields.io/github/sponsors/dahlia?logo=github)][GitHub Sponsors] 8 | 9 | 華人地區、日本和韓國是所謂的[漢字文化圈], 10 | 自近代以來利用漢字的構詞能力翻譯和借入了西方的各種概念。 11 | 其中,雖然不同國家對於某些術語有各自的譯法,但也有直接借入鄰國現成譯法的情況。 12 | 於是,漢字文化圈的國家在共享很多詞的同時,也某種程度上擁有各自固有的詞。 13 | 在電腦科學術語中也是如此。 14 | 15 | 本頁登載對照表,該表比較漢字文化圈的各個地區如何翻譯主要來自英語的電腦科學術語。 16 | 17 | 本著作係採用[創用CC姓名標示-相同方式分享4.0國際授權條款][CC BY-SA 4.0]授權。 18 | 19 | [漢字文化圈]: https://zh.wikipedia.org/wiki/%E6%BC%A2%E5%AD%97%E6%96%87%E5%8C%96%E5%9C%88 20 | [GitHub]: https://github.com/dahlia/cjk-compsci-terms 21 | [Netlify]: https://app.netlify.com/sites/cjk-compsci-terms/deploys 22 | [CC BY-SA 4.0]: https://creativecommons.org/licenses/by-sa/4.0/ 23 | [GitHub Sponsors]: https://github.com/sponsors/dahlia 24 | 25 | 26 | 27 | 28 | 29 | 簡介 30 | ---- 31 | 32 | ### 同源詞 (cognate) 33 | 34 | 同源詞指擁有同一個詞源的詞彙。 35 | 36 | 例如:英語的computer(電腦)和日語的 37 | コンピュータ(電腦),漢語的科學和韓語的 38 | gwahag(科學) 39 | 互為同源詞。 40 | 41 | 同源詞以相同顏色的邊框標示。 42 | 43 | ### 仿譯 (calque) 44 | 45 | 仿譯,指將原文以詞素為單位分段翻譯的方式。 46 | 47 | 例如:漢語單詞軟件是英語單詞software的翻譯, 48 | 分別翻譯了英語詞素soft和 49 | ware。 50 | 51 | 不同語言譯文當中相對應的語素以相同顏色的底線標示。 52 | 53 | ### 音譯 54 | 55 | 在詞素為外語音譯的情況,在該詞素上方加註原文。 56 | 57 | 例如:由於日語單詞コンピュータ(konpyu-ta)是英語單詞 58 | computer的音譯,因此顯示為 59 | コンピュータcomputer。 60 | 61 | ### 羅馬字方案 62 | 63 | 每個單詞下方的括號中以羅馬字顯示發音。 每種語言的轉寫方案如下: 64 | 65 | 標準漢語(中國和台灣) 66 | : [漢語拼音] 67 | 68 | 廣東話(香港) 69 | : [香港語言學學會粵語拼音方案][粵拼] 70 | 71 | 日語 72 | : [平文式羅馬字] 73 | 74 | 韓語 75 | : [文化觀光部2000年式](用於復形態音素的學術符號[^1]) 76 | 77 | [^1]: 國立國語院[「國語羅馬字表記法」第3章第8項](韓語) 78 | 79 | [漢語拼音]: https://zh.wikipedia.org/wiki/%E6%B1%89%E8%AF%AD%E6%8B%BC%E9%9F%B3 80 | [粵拼]: https://zh.wikipedia.org/wiki/%E9%A6%99%E6%B8%AF%E8%AA%9E%E8%A8%80%E5%AD%B8%E5%AD%B8%E6%9C%83%E7%B2%B5%E8%AA%9E%E6%8B%BC%E9%9F%B3%E6%96%B9%E6%A1%88 81 | [平文式羅馬字]: https://zh.wikipedia.org/wiki/%E5%B9%B3%E6%96%87%E5%BC%8F%E7%BD%97%E9%A9%AC%E5%AD%97 82 | [文化觀光部2000年式]: https://zh.wikipedia.org/wiki/%E6%96%87%E5%8C%96%E8%A7%82%E5%85%89%E9%83%A82000%E5%B9%B4%E5%BC%8F 83 | [「國語羅馬字表記法」第3章第8項]: https://kornorms.korean.go.kr/regltn/regltnView.do?regltn_code=0004#a489 84 | 85 | 86 | 基本術語 87 | -------- 88 | 89 | [顯示表](tables/basic.yaml) 90 | 91 | 92 | 單位 93 | ---- 94 | 95 | [顯示表](tables/units.yaml) 96 | 97 | 98 | 研究領域 99 | -------- 100 | 101 | [顯示表](tables/studies.yaml) 102 | 103 | 104 | 程式設計 105 | -------- 106 | 107 | [顯示表](tables/programming.yaml) 108 | 109 | 110 | 工具 111 | ---- 112 | 113 | [顯示表](tables/tools.yaml) 114 | 115 | 116 | 計算理論 117 | -------- 118 | 119 | [顯示表](tables/theory-comp.yaml) 120 | 121 | 122 | 編程範式 123 | -------- 124 | 125 | [顯示表](tables/paradigms.yaml) 126 | 127 | 128 | 併發計算 129 | -------- 130 | 131 | [顯示表](tables/concurrency.yaml) 132 | 133 | 134 | 自由及開放原始碼軟體 135 | -------------------- 136 | 137 | [顯示表](tables/foss.yaml) 138 | --------------------------------------------------------------------------------