Enhance school creation and staffing management with native language support
ci / server (push) Failing after 3m44s
ci / client (push) Successful in 14s

- Updated protocol documentation to include `nativeLanguages` in `nameSets` and added `nativeLanguage` to school creation options.
- Enhanced the UI for school creation to allow selection of native languages, improving user experience.
- Revised API interfaces to accommodate new native language features, ensuring proper data handling.
- Improved localization strings to support new native language functionalities in both English and Russian.
- Updated tests to validate the new native language features and ensure robust functionality in staffing scenarios.
This commit is contained in:
Leonid Pershin
2026-08-19 22:22:31 +03:00
parent 21d79cb49b
commit 5a00ad7746
48 changed files with 2064 additions and 312 deletions
@@ -3,6 +3,11 @@
"patronymicRule": "slavic",
"defaultGivenDeclension": "hard",
"defaultSurnameDeclension": "ov",
"nativeLanguages": ["RussianLanguage", "BelarusianLanguage", "UkrainianLanguage"],
"relatedLanguageChance": 0.6,
"relatedLanguageMean": 22,
"relatedLanguageStdDev": 8,
"relatedLanguageMax": 40,
"maleGiven": [
{ "form": "Александр" },
{ "form": "Алексей" },
@@ -61,9 +61,4 @@
"range": { "min": 0, "max": 100 },
"distribution": { "mean": 48, "stdDev": 16 },
},
{
"defName": "ForeignLanguage",
"range": { "min": 0, "max": 100 },
"distribution": { "mean": 50, "stdDev": 15 },
},
]
@@ -0,0 +1,40 @@
[
{
"defName": "English",
"range": { "min": 0, "max": 100 },
"distribution": { "mean": 48, "stdDev": 15 },
"adultChance": 0.4,
"ageMeans": [
{ "age": 11, "mean": 28 },
{ "age": 17, "mean": 50 },
],
},
{
"defName": "German",
"range": { "min": 0, "max": 100 },
"distribution": { "mean": 42, "stdDev": 14 },
"adultChance": 0.08,
"ageMeans": [
{ "age": 14, "mean": 24 },
{ "age": 17, "mean": 42 },
],
},
{
"defName": "BelarusianLanguage",
"range": { "min": 0, "max": 100 },
"distribution": { "mean": 52, "stdDev": 13 },
"ageMeans": [
{ "age": 7, "mean": 32 },
{ "age": 17, "mean": 56 },
],
},
{
"defName": "UkrainianLanguage",
"range": { "min": 0, "max": 100 },
"distribution": { "mean": 52, "stdDev": 13 },
"ageMeans": [
{ "age": 7, "mean": 32 },
{ "age": 17, "mean": 56 },
],
},
]
@@ -1,6 +1,7 @@
[
{
"defName": "Agility",
"always": true,
"range": { "min": 0, "max": 100 },
"distribution": { "mean": 50, "stdDev": 14 },
"bodyLimits": [
@@ -11,6 +12,7 @@
},
{
"defName": "Strength",
"always": true,
"range": { "min": 0, "max": 100 },
"distribution": { "mean": 50, "stdDev": 14 },
"bodyLimits": [
@@ -20,6 +22,7 @@
},
{
"defName": "Endurance",
"always": true,
"range": { "min": 0, "max": 100 },
"distribution": { "mean": 50, "stdDev": 13 },
"bodyLimits": [
@@ -0,0 +1,13 @@
[
{
"defName": "Communication",
"always": true,
"range": { "min": 0, "max": 100 },
"distribution": { "mean": 52, "stdDev": 12 },
"ageMeans": [
{ "age": 7, "mean": 32 },
{ "age": 17, "mean": 52 },
{ "age": 40, "mean": 58 },
],
},
]
@@ -0,0 +1,52 @@
[
{
"defName": "Pedagogy",
"work": true,
"range": { "min": 0, "max": 100 },
"distribution": { "mean": 48, "stdDev": 14 },
"ageMeans": [
{ "age": 22, "mean": 40 },
{ "age": 45, "mean": 58 },
],
},
{
"defName": "Medicine",
"work": true,
"range": { "min": 0, "max": 100 },
"distribution": { "mean": 46, "stdDev": 15 },
"ageMeans": [
{ "age": 22, "mean": 38 },
{ "age": 45, "mean": 56 },
],
},
{
"defName": "Cooking",
"work": true,
"range": { "min": 0, "max": 100 },
"distribution": { "mean": 50, "stdDev": 14 },
"ageMeans": [
{ "age": 20, "mean": 42 },
{ "age": 45, "mean": 58 },
],
},
{
"defName": "Administration",
"work": true,
"range": { "min": 0, "max": 100 },
"distribution": { "mean": 48, "stdDev": 13 },
"ageMeans": [
{ "age": 22, "mean": 40 },
{ "age": 45, "mean": 57 },
],
},
{
"defName": "Librarianship",
"work": true,
"range": { "min": 0, "max": 100 },
"distribution": { "mean": 46, "stdDev": 13 },
"ageMeans": [
{ "age": 22, "mean": 38 },
{ "age": 45, "mean": 55 },
],
},
]
@@ -1,6 +1,6 @@
{
"defName": "Staffing",
"poolSize": 12,
"poolSize": 32,
"stayChance": 0.65,
"parentChance": 0.35,
"hourlyWageBase": 30,
@@ -32,7 +32,7 @@
"defName": "ForeignLanguage",
"grades": { "min": 5, "max": 11 },
"hoursPerWeek": 3,
"skills": [{ "skill": "ForeignLanguage", "share": 1 }],
"skills": [{ "skill": "English", "share": 1 }],
},
{
"defName": "History",
@@ -62,6 +62,16 @@
"Geography": "Geography",
"Informatics": "Informatics",
"ForeignLanguage": "Foreign language",
"English": "English",
"German": "German",
"BelarusianLanguage": "Belarusian",
"UkrainianLanguage": "Ukrainian",
"Communication": "Communication",
"Pedagogy": "Pedagogy",
"Medicine": "Medicine",
"Cooking": "Cooking",
"Administration": "Administration",
"Librarianship": "Librarianship",
"Agility": "Agility",
"Strength": "Strength",
"Endurance": "Endurance",
@@ -62,6 +62,16 @@
"Geography": "География",
"Informatics": "Информатика",
"ForeignLanguage": "Иностранный язык",
"English": "Английский",
"German": "Немецкий",
"BelarusianLanguage": "Белорусский",
"UkrainianLanguage": "Украинский",
"Communication": "Общение",
"Pedagogy": "Педагогика",
"Medicine": "Медицина",
"Cooking": "Готовка",
"Administration": "Делопроизводство",
"Librarianship": "Библиотечное дело",
"Agility": "Ловкость",
"Strength": "Сила",
"Endurance": "Выносливость",