Skip to content

Commit c721ffe

Browse files
committed
chore: wip
1 parent 7ecf8a6 commit c721ffe

33 files changed

+1125
-5
lines changed

docs/features/locale-variants.md

Lines changed: 17 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -18,16 +18,28 @@ Locale variants use the format `{language}_{REGION}` or `{language}-{REGION}`:
1818
- `es_ES` / `es-ES` - Spanish (Spain)
1919
- `es_MX` / `es-MX` - Spanish (Mexico)
2020

21-
### Other Variants
21+
### German Variants
2222

23-
- `fr_FR` / `fr-FR` - French (France)
24-
- `fr_CA` / `fr-CA` - French (Canada)
2523
- `de_DE` / `de-DE` - German (Germany)
2624
- `de_AT` / `de-AT` - German (Austria)
2725
- `de_CH` / `de-CH` - German (Switzerland)
26+
27+
### Chinese Variants
28+
29+
- `zh_CN` / `zh-CN` - Chinese (Simplified, China)
30+
- `zh_TW` / `zh-TW` - Chinese (Traditional, Taiwan)
31+
32+
### Portuguese Variants
33+
2834
- `pt_BR` / `pt-BR` - Portuguese (Brazil)
29-
- `zh_CN` / `zh-CN` - Chinese (Simplified)
30-
- `zh_TW` / `zh-TW` - Chinese (Traditional)
35+
- `pt_PT` / `pt-PT` - Portuguese (Portugal)
36+
- `pt_MZ` / `pt-MZ` - Portuguese (Mozambique)
37+
38+
### Other Variants
39+
40+
- `fr_FR` / `fr-FR` - French (France)
41+
- `fr_CA` / `fr-CA` - French (Canada)
42+
- `zu_ZA` / `zu-ZA` - Zulu (South Africa)
3143

3244
## Usage
3345

packages/core/src/locale-loader.ts

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,7 @@ export class LocaleLoader {
2424
'ja',
2525
'tl',
2626
'zh',
27+
'zu',
2728
'nl',
2829
'ko',
2930
'no',
@@ -57,6 +58,7 @@ export class LocaleLoader {
5758
'pt_MZ',
5859
'zh_CN',
5960
'zh_TW',
61+
'zu_ZA',
6062
] as const
6163

6264
/**

packages/de-at/build.ts

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
import { dts } from 'bun-plugin-dtsx'
2+
3+
await Bun.build({
4+
entrypoints: ['./src/index.ts'],
5+
outdir: './dist',
6+
plugins: [dts()],
7+
})

packages/de-at/package.json

Lines changed: 49 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,49 @@
1+
{
2+
"name": "@nanofaker/locale-de-at",
3+
"type": "module",
4+
"version": "0.0.0",
5+
"description": "German (Austria) locale data for nanofaker",
6+
"author": "Chris Breuer <chris@stacksjs.org>",
7+
"license": "MIT",
8+
"homepage": "https://github.com/stacksjs/nanofaker#readme",
9+
"repository": {
10+
"type": "git",
11+
"url": "git+https://github.com/stacksjs/nanofaker.git"
12+
},
13+
"bugs": {
14+
"url": "https://github.com/stacksjs/nanofaker/issues"
15+
},
16+
"keywords": [
17+
"nanofaker",
18+
"locale",
19+
"de-at",
20+
"german",
21+
"austria",
22+
"fake-data",
23+
"test-data"
24+
],
25+
"exports": {
26+
".": {
27+
"types": "./dist/index.d.ts",
28+
"import": "./dist/index.js"
29+
}
30+
},
31+
"module": "./dist/index.js",
32+
"types": "./dist/index.d.ts",
33+
"files": [
34+
"dist"
35+
],
36+
"scripts": {
37+
"build": "bun --bun build.ts",
38+
"typecheck": "bun --bun tsc --noEmit"
39+
},
40+
"peerDependencies": {
41+
"nanofaker": "workspace:*"
42+
},
43+
"devDependencies": {
44+
"@types/bun": "^1.2.23",
45+
"bun-plugin-dtsx": "0.9.5",
46+
"bunfig": "^0.15.0",
47+
"typescript": "^5.9.3"
48+
}
49+
}

packages/de-at/src/de_AT.ts

Lines changed: 85 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,85 @@
1+
import type { LocaleDefinition } from 'nanofaker'
2+
3+
/**
4+
* German (Austria) locale
5+
* Extends the base 'de' locale with Austria-specific data
6+
*/
7+
export const de_AT: Partial<LocaleDefinition> = {
8+
title: 'German (Austria)',
9+
10+
// Austria-specific address data
11+
address: {
12+
city: [
13+
'Wien', 'Graz', 'Linz', 'Salzburg', 'Innsbruck', 'Klagenfurt', 'Villach',
14+
'Wels', 'St. Pölten', 'Dornbirn', 'Wiener Neustadt', 'Steyr', 'Feldkirch',
15+
'Bregenz', 'Leonding', 'Klosterneuburg', 'Baden', 'Wolfsberg', 'Leoben',
16+
'Krems', 'Traun', 'Amstetten', 'Kapfenberg', 'Mödling', 'Hallein',
17+
],
18+
state: [
19+
'Wien',
20+
'Niederösterreich',
21+
'Oberösterreich',
22+
'Steiermark',
23+
'Tirol',
24+
'Kärnten',
25+
'Salzburg',
26+
'Vorarlberg',
27+
'Burgenland',
28+
],
29+
stateAbbr: ['W', 'NÖ', 'OÖ', 'ST', 'T', 'K', 'S', 'V', 'B'],
30+
country: ['Österreich', 'Austria'],
31+
countryCode: ['AT'],
32+
zipCode: ['####'],
33+
buildingNumber: ['###', '##', '#', '##a', '#a'],
34+
},
35+
36+
// Austrian phone formats
37+
phone: {
38+
formats: [
39+
'0###/######',
40+
'0### ######',
41+
'+43 ### ######',
42+
'+43-###-######',
43+
'(0###) ######',
44+
],
45+
},
46+
47+
// Austrian cuisine
48+
food: {
49+
dish: [
50+
'Wiener Schnitzel', 'Tafelspitz', 'Kaiserschmarrn', 'Sachertorte',
51+
'Apfelstrudel', 'Tiroler Gröstl', 'Kaspressknödel', 'Schweinsbraten',
52+
'Backhendl', 'Gulasch', 'Erdäpfelsalat', 'Knödel', 'Leberknödelsuppe',
53+
'Frittatensuppe', 'Krautfleckerl', 'Brettljause', 'Käsespätzle',
54+
'Kärntner Kasnudeln', 'Topfenstrudel', 'Salzburger Nockerln',
55+
'Linzer Torte', 'Marillenknödel', 'Zwetschkenröster', 'Baunzerl',
56+
'Kiachl', 'Grammelknödel', 'Blunzngröstl', 'Bosna', 'Leberkäse',
57+
],
58+
ingredient: [
59+
'Erdäpfel', 'Kraut', 'Zwiebel', 'Knoblauch', 'Topfen', 'Sauerrahm',
60+
'Schweinefleisch', 'Rindfleisch', 'Kümmel', 'Marille', 'Zwetschke',
61+
'Kürbiskernöl', 'Eierschwammerl', 'Serviettenknödel', 'Semmelknödel',
62+
'Kren', 'Preiselbeeren', 'Staubzucker', 'Schlagobers', 'Mehl',
63+
],
64+
dessert: [
65+
'Sachertorte', 'Apfelstrudel', 'Kaiserschmarrn', 'Topfenstrudel',
66+
'Salzburger Nockerln', 'Linzer Torte', 'Marillenknödel', 'Palatschinken',
67+
'Mohnnudeln', 'Buchteln', 'Vanillekipferl', 'Punschkrapfen',
68+
'Kardinalschnitten', 'Esterhazy-Torte', 'Dobostorte',
69+
],
70+
cuisine: [
71+
'Österreichisch', 'Wiener Küche', 'Tiroler Küche', 'Steirische Küche',
72+
'Italienisch', 'Böhmisch', 'Ungarisch', 'Balkan', 'Mediterran',
73+
],
74+
spice: [
75+
'Kümmel', 'Majoran', 'Kren', 'Petersilie', 'Schnittlauch', 'Thymian',
76+
'Liebstöckel', 'Estragon', 'Kerbel', 'Bohnenkraut',
77+
],
78+
},
79+
80+
// Austrian internet domains
81+
internet: {
82+
domainSuffix: ['at', 'co.at', 'or.at', 'com', 'eu'],
83+
freeEmail: ['gmail.com', 'gmx.at', 'aon.at', 'chello.at', 'hotmail.com'],
84+
},
85+
}

packages/de-at/src/index.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
export { de_AT } from './de_AT'

packages/de-at/tsconfig.json

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,8 @@
1+
{
2+
"extends": "../../tsconfig.json",
3+
"compilerOptions": {
4+
"outDir": "./dist",
5+
"rootDir": "./src"
6+
},
7+
"include": ["src/**/*"]
8+
}

packages/de-ch/build.ts

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
import { dts } from 'bun-plugin-dtsx'
2+
3+
await Bun.build({
4+
entrypoints: ['./src/index.ts'],
5+
outdir: './dist',
6+
plugins: [dts()],
7+
})

packages/de-ch/package.json

Lines changed: 50 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,50 @@
1+
{
2+
"name": "@nanofaker/locale-de-ch",
3+
"type": "module",
4+
"version": "0.0.0",
5+
"description": "German (Switzerland) locale data for nanofaker",
6+
"author": "Chris Breuer <chris@stacksjs.org>",
7+
"license": "MIT",
8+
"homepage": "https://github.com/stacksjs/nanofaker#readme",
9+
"repository": {
10+
"type": "git",
11+
"url": "git+https://github.com/stacksjs/nanofaker.git"
12+
},
13+
"bugs": {
14+
"url": "https://github.com/stacksjs/nanofaker/issues"
15+
},
16+
"keywords": [
17+
"nanofaker",
18+
"locale",
19+
"de-ch",
20+
"german",
21+
"switzerland",
22+
"swiss",
23+
"fake-data",
24+
"test-data"
25+
],
26+
"exports": {
27+
".": {
28+
"types": "./dist/index.d.ts",
29+
"import": "./dist/index.js"
30+
}
31+
},
32+
"module": "./dist/index.js",
33+
"types": "./dist/index.d.ts",
34+
"files": [
35+
"dist"
36+
],
37+
"scripts": {
38+
"build": "bun --bun build.ts",
39+
"typecheck": "bun --bun tsc --noEmit"
40+
},
41+
"peerDependencies": {
42+
"nanofaker": "workspace:*"
43+
},
44+
"devDependencies": {
45+
"@types/bun": "^1.2.23",
46+
"bun-plugin-dtsx": "0.9.5",
47+
"bunfig": "^0.15.0",
48+
"typescript": "^5.9.3"
49+
}
50+
}

packages/de-ch/src/de_CH.ts

Lines changed: 83 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,83 @@
1+
import type { LocaleDefinition } from 'nanofaker'
2+
3+
/**
4+
* German (Switzerland) locale
5+
* Extends the base 'de' locale with Switzerland-specific data
6+
*/
7+
export const de_CH: Partial<LocaleDefinition> = {
8+
title: 'German (Switzerland)',
9+
10+
// Switzerland-specific address data
11+
address: {
12+
city: [
13+
'Zürich', 'Genf', 'Basel', 'Bern', 'Lausanne', 'Winterthur', 'Luzern',
14+
'St. Gallen', 'Lugano', 'Biel', 'Thun', 'Köniz', 'La Chaux-de-Fonds',
15+
'Schaffhausen', 'Freiburg', 'Chur', 'Vernier', 'Neuenburg', 'Uster',
16+
'Sion', 'Emmen', 'Zug', 'Yverdon-les-Bains', 'Kriens', 'Rapperswil',
17+
],
18+
state: [
19+
'Zürich', 'Bern', 'Luzern', 'Uri', 'Schwyz', 'Obwalden', 'Nidwalden',
20+
'Glarus', 'Zug', 'Freiburg', 'Solothurn', 'Basel-Stadt', 'Basel-Landschaft',
21+
'Schaffhausen', 'Appenzell Ausserrhoden', 'Appenzell Innerrhoden',
22+
'St. Gallen', 'Graubünden', 'Aargau', 'Thurgau', 'Tessin', 'Waadt',
23+
'Wallis', 'Neuenburg', 'Genf', 'Jura',
24+
],
25+
stateAbbr: [
26+
'ZH', 'BE', 'LU', 'UR', 'SZ', 'OW', 'NW', 'GL', 'ZG', 'FR', 'SO',
27+
'BS', 'BL', 'SH', 'AR', 'AI', 'SG', 'GR', 'AG', 'TG', 'TI', 'VD',
28+
'VS', 'NE', 'GE', 'JU',
29+
],
30+
country: ['Schweiz', 'Switzerland', 'Suisse', 'Svizzera'],
31+
countryCode: ['CH'],
32+
zipCode: ['####'],
33+
buildingNumber: ['###', '##', '#', '##a', '#a'],
34+
},
35+
36+
// Swiss phone formats
37+
phone: {
38+
formats: [
39+
'0## ### ## ##',
40+
'+41 ## ### ## ##',
41+
'0### ### ###',
42+
'+41 ### ### ###',
43+
],
44+
},
45+
46+
// Swiss cuisine (German-speaking regions focus)
47+
food: {
48+
dish: [
49+
'Fondue', 'Raclette', 'Rösti', 'Zürcher Geschnetzeltes', 'Älplermagronen',
50+
'Käsefondue', 'Fleischfondue', 'Cervelat', 'Bratwurst', 'Schüblig',
51+
'Bündnerfleisch', 'Capuns', 'Pizokel', 'Gerstensuppe', 'Basler Läckerli',
52+
'Biberli', 'Tirggel', 'Züri Gschnätzlets', 'Berner Platte', 'Luzerner Chügelipastete',
53+
'St. Galler Schüblig', 'Appenzeller Siedwurst', 'Cholera (Gemüsekuchen)',
54+
'Maluns', 'Ribel', 'Schaffhauser Bölletünne', 'Basler Mehlsuppe',
55+
'Engadiner Nusstorte', 'Rüeblitorte', 'Zuger Kirschtorte',
56+
],
57+
ingredient: [
58+
'Gruyère', 'Emmentaler', 'Appenzeller', 'Sbrinz', 'Raclette-Käse',
59+
'Rahm', 'Butter', 'Kartoffeln', 'Zwiebeln', 'Speck', 'Mehl',
60+
'Milch', 'Eier', 'Weisswein', 'Kirschwasser', 'Gewürze',
61+
'Knoblauch', 'Majoran', 'Muskatnuss', 'Pfeffer',
62+
],
63+
dessert: [
64+
'Basler Läckerli', 'Biberli', 'Tirggel', 'Engadiner Nusstorte',
65+
'Rüeblitorte', 'Zuger Kirschtorte', 'Vermicelles', 'Meringue mit Rahm',
66+
'Nidelzältli', 'Totenbeinli', 'Leckerli', 'Magenbrot',
67+
],
68+
cuisine: [
69+
'Schweizerisch', 'Alpenküche', 'Zürcher Küche', 'Berner Küche',
70+
'Bündner Küche', 'Französisch', 'Italienisch', 'Deutsch',
71+
],
72+
spice: [
73+
'Majoran', 'Muskatnuss', 'Pfeffer', 'Salz', 'Petersilie',
74+
'Schnittlauch', 'Thymian', 'Lorbeer', 'Nelken', 'Zimt',
75+
],
76+
},
77+
78+
// Swiss internet domains
79+
internet: {
80+
domainSuffix: ['ch', 'com', 'li', 'eu'],
81+
freeEmail: ['gmail.com', 'bluewin.ch', 'gmx.ch', 'hotmail.com', 'swissonline.ch'],
82+
},
83+
}

0 commit comments

Comments
 (0)