지원 언어
randino는 9개 언어로 텍스트를 생성합니다. 언어마다 단어 풀과 이름 순서, 로마자 표기 규칙이 따로 있습니다. 모든 생성기는 언어를 받으며, 지정하지 않으면 지원하는 모든 언어를 섞습니다.
| 코드 | 언어 | 표기 | 사람 이름 | 단어와 닉네임 | 문장 |
|---|---|---|---|---|---|
en | 영어 | English | ✅ | ✅ | ✅ |
ko | 한국어 | 한국어 | ✅ | ✅ | ✅ |
ja | 일본어 | 日本語 | ✅ | ✅ | ✅ |
zh | 중국어 | 中文 | ✅ | ✅ | ✅ |
it | 이탈리아어 | Italiano | ✅ | ✅ | ✅ |
de | 독일어 | Deutsch | ✅ | ✅ | ✅ |
ru | 러시아어 | Русский | ✅ | ✅ | ✅ |
es | 스페인어 | Español | ✅ | ✅ | ✅ |
vi | 베트남어 | Tiếng Việt | ✅ | ✅ | ✅ |
코드는 문자열 리터럴이며, 런타임에는 NAME_LANGUAGES와 WORD_LANGUAGES로도 확인할 수 있습니다.
import { NAME_LANGUAGES, WORD_LANGUAGES } from 'randino';
NAME_LANGUAGES; // ['en', 'ko', 'ja', 'zh', 'it', 'de', 'ru', 'es', 'vi']
WORD_LANGUAGES; // ['en', 'ko', 'ja', 'zh', 'vi', 'es', 'it', 'de', 'ru']코드는 두 enum의 멤버이며, 목록은 nameLanguages와 wordLanguages로도 확인할 수 있습니다.
import 'package:randino/randino.dart';
NameLanguage.ko.name; // 'ko'
nameLanguages; // 표시 순서대로 나열된 모든 NameLanguage
wordLanguages; // 모든 WordLanguage, 표시 순서대로코드는 Literal 타입이므로 존재하지 않는 코드는 타입 검사기가 거부하며, 목록은 런타임에도 NAME_LANGUAGES와 WORD_LANGUAGES로 확인할 수 있습니다.
from randino import NAME_LANGUAGES, WORD_LANGUAGES
NAME_LANGUAGES # ('en', 'ko', 'ja', 'zh', 'it', 'de', 'ru', 'es', 'vi')
WORD_LANGUAGES # ('en', 'ko', 'ja', 'zh', 'vi', 'es', 'it', 'de', 'ru')사람 이름
언어마다 세 가지가 다릅니다. 이름의 어느 부분이 앞에 오는지, 중간 이름이 있는지, 고유 문자 표기를 영어 발음으로 어떻게 옮기는지입니다.
| 코드 | 이름 순서 | 중간 이름 | 예시 |
|---|---|---|---|
en | 이름 먼저 | 있음 | Paisley Lewis |
ko | 성 먼저 | 없음 | 김태윤 → Kim Taeyun |
ja | 성 먼저 | 없음 | 山口直人 → Yamaguchi Naoto |
zh | 성 먼저 | 없음 | 赵勇轩 → Zhao Yongxuan |
it | 이름 먼저 | 있음 | Giorgia Mancini |
de | 이름 먼저 | 있음 | Johanna Wolf |
ru | 이름 먼저 | 있음 (부칭) | Иван Семёнов → Ivan Semyonov |
es | 이름 먼저 | 있음 | Gonzalo Martín → Gonzalo Martin |
vi | 성 먼저 | 있음 | Đặng Quân → Dang Quan |
한국어, 일본어, 중국어에는 중간 이름이 없으므로, 중간 이름 옵션은 없는 이름을 만들어내는 대신 그냥 무시됩니다. 이를 직접 확인하는 헬퍼가 있습니다: nameSupportsMiddleName.
로마자 표기
로마자 표기는 번역이 아니라 고유 표기의 영어 발음이며, 문자 체계마다 방식이 다릅니다.
- 라틴 문자는 발음 구별 부호를 떼어냅니다.
Pérez→Perez,Müller→Muller,Đỗ→Do. - 키릴 문자는 글자 단위로 음역합니다.
Семёнов→Semyonov. - 한글은 국어의 로마자 표기법을 따르며 음절 사이의 음운 변동까지 반영합니다.
석민은Seokmin이 아니라Seongmin입니다. 성씨는 관용 표기를 사용해서김은Gim이 아니라Kim이 됩니다. - 일본어와 중국어는 글자마다 읽는 법을 데이터에 함께 담고 있어서
佐藤는Sato,王은Wang이 됩니다.
영어는 로마자 표기를 해도 아무것도 바뀌지 않는 유일한 언어입니다. 이미 라틴 알파벳으로 쓰여 있기 때문입니다.
단어와 닉네임
단어 풀은 9개 언어를 모두 지원하고, 그 위에 있는 randWord와 29개 테마 함수와 randNickname도 마찬가지입니다. 언어마다 다른 것은 수식어가 어디에 놓이는지, 그리고 명사 옆에서 모양이 바뀌는지입니다. 둘 다 각 언어가 자기 프레임과 일치 규칙에 적어 둡니다.
| 코드 | 언어 | 형태 | 예시 |
|---|---|---|---|
ko | 한국어 | 수식어, 뒤따르는 단어 | 멋진사자, 고양이꼬리 |
en | 영어 | 수식어, 뒤따르는 단어 | MistyOwl, CatTail |
ja | 일본어 | 수식어 (연체형) | 青いライオン, 星の影 |
zh | 중국어 | 수식어, 동사 앞에는 的 | 快乐熊猫, 奔跑的狮子 |
vi | 베트남어 | 수식어가 명사 뒤에 | mèo xanh, đuôi mèo |
es | 스페인어 | 수식어가 뒤에서 일치 | gato azul, luna dorada |
it | 이탈리아어 | 수식어가 뒤에서 일치 | gatto azzurro, luna dorata |
de | 독일어 | 수식어가 앞에서 굴절 | blauer Wal, blaue Katze |
ru | 러시아어 | 수식어가 앞에서 굴절 | синий кит, синяя рыба |
형태는 언어가 직접 선언하므로, 베트남어는 수식어를 명사 뒤에 두고 소유의 대상을 주인 앞에 둡니다. 굴절하는 언어는 명사마다 성을 태그로 달고 수식어가 바뀌는 어미를 목록으로 적어 둡니다. 그래서 스페인어는 gato dorado와 luna dorada를 어느 쪽도 두 번 저장하지 않고 씁니다. 단수형이 아예 없는 명사(ножницы, gafas, Jeans)는 성 대신 복수를 답니다. 그 옆에는 단수 수식어가 설 수 없기 때문입니다.
이름 생성기가 아는 언어에는 모두 단어 풀이 있습니다. 그래서 language는 이 패키지의 모든 생성 함수에서 같은 9개 코드를 뜻합니다.
일본어와 중국어에서 명사와 명사를 이어 붙이려면 の와 的이 필요합니다. 조사 없이 붙이면 기준 단어가 추상적일 때 뜻을 알 수 없는 말이 되기 때문입니다.
문장
문장도 아홉 언어가 모두 씁니다. 각 언어는 자기 문법이 감당할 수 있는 형태를 선언합니다. 언어마다 다른 것은 동사가 어디에 서는지, 구를 무엇으로 표시하는지, 어떤 형태를 아예 쓸 수 없는지입니다.
| 코드 | 언어 | 선언하는 형태 | 문장 |
|---|---|---|---|
ko | 한국어 | 전부, 동사가 끝에 | 검은 고양이가 숲에서 잠잔다. |
ja | 일본어 | 전부, 동사가 끝에 | ハンバーガーが暗礁で冷める。 |
zh | 중국어 | 전부, 장소가 동사 앞에 | 巨乌贼又品尝朱红椰汁。 |
en | 영어 | 전부, 동사가 두 번째에 | The angler cleans the towel in the balcony. |
vi | 베트남어 | 전부, 동사가 두 번째에 | Lông mi run trong khe núi. |
es | 스페인어 | 전부, 동사가 두 번째에 | La vía láctea brilla en la roca pobre. |
it | 이탈리아어 | 전부, 장소에는 관사 없이 | Il birraio audace dimentica l'eclissi. |
de | 독일어 | 목적어와 장소 없음 | Im Frühling blüht eine Chrysantheme noch. |
ru | 러시아어 | 목적어와 장소 없음 | Спутанный юпитер едва светлеет. |
독일어와 러시아어가 좁은 이유는 같습니다. 둘 다 목적어는 대격에, 장소는 또 다른 격에 두어야 하는데, 격이 바뀌면 명사의 어미나 앞의 관사가 바뀌므로 그런 형태는 선언하지 않습니다. 그런 요청이 오면 그 언어가 가진 형태 중 가장 가까운 것으로 답합니다. 자세한 내용은 문장에 있습니다.