Skip to content

多语言

简介

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'
}