多语言
简介
DataFaker借助faker.js,提供了 70+种语言的本地化数据。当使用某种语言环境时,生成的数据将会是对应的语言。
所支持的语言
| 语言代码 | 语言名称 | Faker 对象名 |
|---|---|---|
| af_ZA | 南非荷兰语 | fakerAF_ZA |
| ar | 阿拉伯语 | fakerAR |
| az | 阿塞拜疆语 | fakerAZ |
| base | 基础 | fakerBASE |
| bn_BD | 孟加拉语(孟加拉国) | fakerBN_BD |
| cs_CZ | 捷克语(捷克) | fakerCS_CZ |
| cy | 威尔士语 | fakerCY |
| da | 丹麦语 | fakerDA |
| de | 德语 | fakerDE |
| de_AT | 德语(奥地利) | fakerDE_AT |
| de_CH | 德语(瑞士) | fakerDE_CH |
| dv | 马尔代夫语 | fakerDV |
| el | 希腊语 | fakerEL |
| en | 英语 | fakerEN |
| en_AU | 英语(澳大利亚) | fakerEN_AU |
| en_AU_ocker | 英语(澳大利亚 Ocker) | fakerEN_AU_ocker |
| en_BORK | 英语(博克) | fakerEN_BORK |
| en_CA | 英语(加拿大) | fakerEN_CA |
| en_GB | 英语(英国) | fakerEN_GB |
| en_GH | 英语(加纳) | fakerEN_GH |
| en_HK | 英语(香港) | fakerEN_HK |
| en_IE | 英语(爱尔兰) | fakerEN_IE |
| en_IN | 英语(印度) | fakerEN_IN |
| en_NG | 英语(尼日利亚) | fakerEN_NG |
| en_US | 英语(美国) | fakerEN_US |
| en_ZA | 英语(南非) | fakerEN_ZA |
| eo | 世界语 | fakerEO |
| es | 西班牙语 | fakerES |
| es_MX | 西班牙语(墨西哥) | fakerES_MX |
| fa | 波斯语 | fakerFA |
| fi | 芬兰语 | fakerFI |
| fr | 法语 | fakerFR |
| fr_BE | 法语(比利时) | fakerFR_BE |
| fr_CA | 法语(加拿大) | fakerFR_CA |
| fr_CH | 法语(瑞士) | fakerFR_CH |
| fr_LU | 法语(卢森堡) | fakerFR_LU |
| fr_SN | 法语(塞内加尔) | fakerFR_SN |
| he | 希伯来语 | fakerHE |
| hr | 克罗地亚语 | fakerHR |
| hu | 匈牙利语 | fakerHU |
| hy | 亚美尼亚语 | fakerHY |
| id_ID | 印度尼西亚语(印度尼西亚) | fakerID_ID |
| it | 意大利语 | fakerIT |
| ja | 日语 | fakerJA |
| ka_GE | 格鲁吉亚语(格鲁吉亚) | fakerKA_GE |
| ko | 韩语 | fakerKO |
| lv | 拉脱维亚语 | fakerLV |
| mk | 马其顿语 | fakerMK |
| nb_NO | 挪威语(挪威) | fakerNB_NO |
| ne | 尼泊尔语 | fakerNE |
| nl | 荷兰语 | fakerNL |
| nl_BE | 荷兰语(比利时) | fakerNL_BE |
| pl | 波兰语 | fakerPL |
| pt_BR | 葡萄牙语(巴西) | fakerPT_BR |
| pt_PT | 葡萄牙语(葡萄牙) | fakerPT_PT |
| ro | 罗马尼亚语 | fakerRO |
| ro_MD | 罗马尼亚语(摩尔多瓦) | fakerRO_MD |
| ru | 俄语 | fakerRU |
| sk | 斯洛伐克语 | fakerSK |
| sr_RS_latin | 塞尔维亚语(塞尔维亚,拉丁语) | fakerSR_RS_latin |
| sv | 瑞典语 | fakerSV |
| ta_IN | 泰米尔语(印度) | fakerTA_IN |
| th | 泰语 | fakerTH |
| tr | 土耳其语 | fakerTR |
| uk | 乌克兰语 | fakerUK |
| ur | 乌尔都语 | fakerUR |
| uz_UZ_latin | 乌兹别克语(乌兹别克斯坦,拉丁语) | fakerUZ_UZ_latin |
| vi | 越南语 | fakerVI |
| yo_NG | 约鲁巴语(尼日利亚) | fakerYO_NG |
| zh_CN | 中文(中国) | fakerZH_CN |
| zh_TW | 中文(台湾) | fakerZH_TW |
| zu_ZA | 祖鲁语(南非) | fakerZU_ZA |
全局设置语言环境
基本语法
可以通过DataFaker.setLocale()方法全局设置默认语言环境。这个方法会接受一个参数,参数类型如下所示:
ts
// 以字符串的方式设置语言环境为中文
DataFaker.setLocale('zh_CN');
// 或者直接使用中文faker对象来进行设置,allFakers是所有faker对象集合
DataFaker.setLocale(allFakers['zh_CN']);ts
// 优先中文然后如果中文对应数据不存在则采用英文,最后采用德文
DataFaker.setLocale(['zh_CN', 'en_US', de_CH]);ts
// 或你可以自定义faker对象
const customLocale: LocaleDefinition = {
internet: {
domainSuffix: ['test'],
},
};
const customFaker = new Faker({
locale: [customLocale, de_CH, de, en, base],
});
DataFaker.setLocale(customFaker);语言缓存
实际上DataFaker.setLocale(['zh_CN', 'en_US', de_CH])等价于
ts
const customFaker = new Faker({
locale: [zh_CN, en_US, de_CH],
});
DataFaker.setLocale(customFaker);它会创建出一个新的Faker对象,并缓存起来,下次再调用DataFaker.setLocale(['zh_CN', 'en_US', de_CH])时,会直接使用缓存的对象。
使用示例
案例:比如下用户模型和公司模型,我们可以采用中文语言环境为默认环境,这时候生成的数据当中就含有中文:
ts
// 用户模型
const userModel = defineModel('user', {
id: 'number.int',
firstName: 'person.firstName',
secondName: 'person.lastName',
age: ['number.int', { min: 18, max: 65 }],
email: (ctx) => {
return faker.internet.email({ firstName: ctx.firstName, lastName: ctx.secondeName });
},
});
// 设置全局语言环境为中文
DataFaker.setLocale('zh_CN');
const userDatas = fakeData(userModel);
console.dir(userDatas, { depth: Infinity });
// 公司模型
const companyModel = defineModel('company', {
name: 'company.name',
address: 'location.streetAddress',
});
const companyDatas = fakeData(companyModel);
console.dir(companyDatas, { depth: Infinity });json
// 用户数据
{
"id": 1040719705843601,
"firstName": "鹭洋",
"secondName": "薛",
"age": 58,
"email": "valljf_Larkin29@hotmail.com"
}
// 公司数据
{
"name": "辽宁省榕融传媒无限公司",
"address": "英巷28404号"
}运行时语言环境设置
基本语法
运行时设置语言环境,其实就是在使用fakeData生成数据的时候,传入语言环境配置:
ts
const userDatas = fakeData(userModel, {
// 指定语言环境
locale: 'zh_CN',
});上面指定语言环境的方式与全局语言环境的方式一致
ts
const userDatas = fakeData(userModel, {
// 以字符串的方式设置语言环境为中文
locale: 'zh_CN',
// 或者直接使用中文faker对象来进行设置,allFakers是所有faker对象集合
locale: allFakers['zh_CN'],
});ts
const userDatas = fakeData(userModel, {
// 优先中文然后如果中文对应数据不存在则采用英文,最后采用德文
locale: ['zh_CN', 'en_US', de_CH],
});ts
// 或你可以自定义faker对象
const customLocale: LocaleDefinition = {
internet: {
domainSuffix: ['test'],
},
};
const customFaker = new Faker({
locale: [customLocale, de_CH, de, en, base],
});
const userDatas = fakeData(userModel, {
// 优先中文然后如果中文对应数据不存在则采用英文,最后采用德文
locale: customFaker,
});使用示例
案例:比如下用户模型,我们可以采用中文语言环境为默认环境,这时候生成的数据当中就含有中文:
ts
const addressModel = defineModel('address', {
country: 'location.country',
city: 'location.city',
});
// 用户模型
const userModel = defineModel('user', {
firstName: 'person.firstName',
secondName: 'person.lastName',
age: ['number.int', { min: 18, max: 65 }],
email: (ctx) => {
return faker.internet.email({ firstName: ctx.firstName, lastName: ctx.secondeName });
},
address: { refModel: 'address', count: 1 },
children: {
refModel: 'user',
deep: 3,
},
});
const userDatas = fakeData(userModel, {
// 指定语言环境
locale: [zh_CN, 'en_AU'],
});
console.dir(userDatas, { depth: Infinity });ts
{
firstName: '黎昕',
secondName: '止',
age: 61,
address: { country: '乍得', city: '安南市' },
children: {
firstName: '懿轩',
secondName: '公冶',
age: 53,
address: { country: '缅甸', city: '衡口市' },
children: {
firstName: '立轩',
secondName: '方',
age: 64,
address: { country: '沙特阿拉伯', city: '北门市' },
children: {
firstName: '嘉熙',
secondName: '介',
age: 29,
address: { country: '尼日利亚', city: '吉阳市' },
children: null,
email: 'gztmft_Cummings@hotmail.com'
},
email: 'o97sbt_Abbott@yahoo.com'
},
email: 'jcvsbt88@yahoo.com'
},
email: 'vdak5x72@gmail.com'
}优先级
运行时语言配置高于全局配置,比如我同时进行全局设置和运行时设置,运行时设置会覆盖全局设置,比如全局设置为英文,而实际仍然采用运行时设置的中文:
ts
// 全局设置语言环境
DataFaker.setLocale(faker);
const addressModel = defineModel('address', {
country: 'location.country',
city: 'location.city',
});
// 用户模型
const userModel = defineModel('user', {
firstName: 'person.firstName',
secondName: 'person.lastName',
age: ['number.int', { min: 18, max: 65 }],
email: (ctx) => {
return faker.internet.email({ firstName: ctx.firstName, lastName: ctx.secondeName });
},
address: { refModel: 'address', count: 1 },
children: {
refModel: 'user',
deep: 3,
},
});
// 运行时指定语言环境
const userDatas = fakeData(userModel, {
// 指定语言环境
locale: [zh_CN, 'en_AU'],
});
console.dir(userDatas, { depth: Infinity });ts
{
firstName: '子欣',
secondName: '申屠',
age: 20,
address: { country: '日本', city: '衡乡县' },
children: {
firstName: '晋鹏',
secondName: '郝',
age: 60,
address: { country: '日本', city: '吉沙市' },
children: {
firstName: '智宸',
secondName: '殳',
age: 57,
address: { country: '吉布提', city: '太口市' },
children: {
firstName: '修洁',
secondName: '涂',
age: 61,
address: { country: '澳大利亚', city: '长京市' },
children: null,
email: 'fselj59@yahoo.com'
},
email: 'k8qi48.Rodriguez@yahoo.com'
},
email: 'k7fv9r_Nienow@yahoo.com'
},
email: 'i1cl5v_Kris@gmail.com'
}