mirror of
https://github.com/Azgaar/Fantasy-Map-Generator.git
synced 2026-04-07 16:06:05 +02:00
Translations POC
This commit is contained in:
parent
3f9a7702d4
commit
0b69c1882b
13 changed files with 4853 additions and 543 deletions
|
|
@ -1,6 +1,10 @@
|
|||
import { last } from "./arrayUtils";
|
||||
import { P } from "./probabilityUtils";
|
||||
|
||||
export const gender = {
|
||||
fr: {},
|
||||
};
|
||||
|
||||
/**
|
||||
* Check if character is a vowel
|
||||
* @param c - The character to check.
|
||||
|
|
@ -30,139 +34,302 @@ export const trimVowels = (string: string, minLength: number = 3) => {
|
|||
* @returns The adjective form of the noun.
|
||||
*/
|
||||
export const getAdjective = (nounToBeAdjective: string) => {
|
||||
const adjectivizationRules = [
|
||||
{
|
||||
name: "guo",
|
||||
probability: 1,
|
||||
condition: / Guo$/,
|
||||
action: (noun: string) => noun.slice(0, -4),
|
||||
},
|
||||
{
|
||||
name: "orszag",
|
||||
probability: 1,
|
||||
condition: /orszag$/,
|
||||
action: (noun: string) =>
|
||||
noun.length < 9 ? `${noun}ian` : noun.slice(0, -6),
|
||||
},
|
||||
{
|
||||
name: "stan",
|
||||
probability: 1,
|
||||
condition: /stan$/,
|
||||
action: (noun: string) =>
|
||||
noun.length < 9 ? `${noun}i` : trimVowels(noun.slice(0, -4)),
|
||||
},
|
||||
{
|
||||
name: "land",
|
||||
probability: 1,
|
||||
condition: /land$/,
|
||||
action: (noun: string) => {
|
||||
if (noun.length > 9) return noun.slice(0, -4);
|
||||
const root = trimVowels(noun.slice(0, -4), 0);
|
||||
if (root.length < 3) return `${noun}ic`;
|
||||
if (root.length < 4) return `${root}lish`;
|
||||
return `${root}ish`;
|
||||
const adjectivizationRules = {
|
||||
en: [
|
||||
{
|
||||
name: "guo",
|
||||
probability: 1,
|
||||
condition: / Guo$/,
|
||||
action: (noun: string) => noun.slice(0, -4),
|
||||
},
|
||||
},
|
||||
{
|
||||
name: "que",
|
||||
probability: 1,
|
||||
condition: /que$/,
|
||||
action: (noun: string) => noun.replace(/que$/, "can"),
|
||||
},
|
||||
{
|
||||
name: "a",
|
||||
probability: 1,
|
||||
condition: /a$/,
|
||||
action: (noun: string) => `${noun}n`,
|
||||
},
|
||||
{
|
||||
name: "o",
|
||||
probability: 1,
|
||||
condition: /o$/,
|
||||
action: (noun: string) => noun.replace(/o$/, "an"),
|
||||
},
|
||||
{
|
||||
name: "u",
|
||||
probability: 1,
|
||||
condition: /u$/,
|
||||
action: (noun: string) => `${noun}an`,
|
||||
},
|
||||
{
|
||||
name: "i",
|
||||
probability: 1,
|
||||
condition: /i$/,
|
||||
action: (noun: string) => `${noun}an`,
|
||||
},
|
||||
{
|
||||
name: "e",
|
||||
probability: 1,
|
||||
condition: /e$/,
|
||||
action: (noun: string) => `${noun}an`,
|
||||
},
|
||||
{
|
||||
name: "ay",
|
||||
probability: 1,
|
||||
condition: /ay$/,
|
||||
action: (noun: string) => `${noun}an`,
|
||||
},
|
||||
{
|
||||
name: "os",
|
||||
probability: 1,
|
||||
condition: /os$/,
|
||||
action: (noun: string) => {
|
||||
const root = trimVowels(noun.slice(0, -2), 0);
|
||||
if (root.length < 4) return noun.slice(0, -1);
|
||||
return `${root}ian`;
|
||||
{
|
||||
name: "orszag",
|
||||
probability: 1,
|
||||
condition: /orszag$/,
|
||||
action: (noun: string) =>
|
||||
noun.length < 9 ? `${noun}ian` : noun.slice(0, -6),
|
||||
},
|
||||
},
|
||||
{
|
||||
name: "es",
|
||||
probability: 1,
|
||||
condition: /es$/,
|
||||
action: (noun: string) => {
|
||||
const root = trimVowels(noun.slice(0, -2), 0);
|
||||
if (root.length > 7) return noun.slice(0, -1);
|
||||
return `${root}ian`;
|
||||
{
|
||||
name: "stan",
|
||||
probability: 1,
|
||||
condition: /stan$/,
|
||||
action: (noun: string) =>
|
||||
noun.length < 9 ? `${noun}i` : trimVowels(noun.slice(0, -4)),
|
||||
},
|
||||
},
|
||||
{
|
||||
name: "l",
|
||||
probability: 0.8,
|
||||
condition: /l$/,
|
||||
action: (noun: string) => `${noun}ese`,
|
||||
},
|
||||
{
|
||||
name: "n",
|
||||
probability: 0.8,
|
||||
condition: /n$/,
|
||||
action: (noun: string) => `${noun}ese`,
|
||||
},
|
||||
{
|
||||
name: "ad",
|
||||
probability: 0.8,
|
||||
condition: /ad$/,
|
||||
action: (noun: string) => `${noun}ian`,
|
||||
},
|
||||
{
|
||||
name: "an",
|
||||
probability: 0.8,
|
||||
condition: /an$/,
|
||||
action: (noun: string) => `${noun}ian`,
|
||||
},
|
||||
{
|
||||
name: "ish",
|
||||
probability: 0.25,
|
||||
condition: /^[a-zA-Z]{6}$/,
|
||||
action: (noun: string) => `${trimVowels(noun.slice(0, -1))}ish`,
|
||||
},
|
||||
{
|
||||
name: "an",
|
||||
probability: 0.5,
|
||||
condition: /^[a-zA-Z]{0,7}$/,
|
||||
action: (noun: string) => `${trimVowels(noun)}an`,
|
||||
},
|
||||
];
|
||||
for (const rule of adjectivizationRules) {
|
||||
{
|
||||
name: "land",
|
||||
probability: 1,
|
||||
condition: /land$/,
|
||||
action: (noun: string) => {
|
||||
if (noun.length > 9) return noun.slice(0, -4);
|
||||
const root = trimVowels(noun.slice(0, -4), 0);
|
||||
if (root.length < 3) return `${noun}ic`;
|
||||
if (root.length < 4) return `${root}lish`;
|
||||
return `${root}ish`;
|
||||
},
|
||||
},
|
||||
{
|
||||
name: "que",
|
||||
probability: 1,
|
||||
condition: /que$/,
|
||||
action: (noun: string) => noun.replace(/que$/, "can"),
|
||||
},
|
||||
{
|
||||
name: "a",
|
||||
probability: 1,
|
||||
condition: /a$/,
|
||||
action: (noun: string) => `${noun}n`,
|
||||
},
|
||||
{
|
||||
name: "o",
|
||||
probability: 1,
|
||||
condition: /o$/,
|
||||
action: (noun: string) => noun.replace(/o$/, "an"),
|
||||
},
|
||||
{
|
||||
name: "u",
|
||||
probability: 1,
|
||||
condition: /u$/,
|
||||
action: (noun: string) => `${noun}an`,
|
||||
},
|
||||
{
|
||||
name: "i",
|
||||
probability: 1,
|
||||
condition: /i$/,
|
||||
action: (noun: string) => `${noun}an`,
|
||||
},
|
||||
{
|
||||
name: "e",
|
||||
probability: 1,
|
||||
condition: /e$/,
|
||||
action: (noun: string) => `${noun}an`,
|
||||
},
|
||||
{
|
||||
name: "ay",
|
||||
probability: 1,
|
||||
condition: /ay$/,
|
||||
action: (noun: string) => `${noun}an`,
|
||||
},
|
||||
{
|
||||
name: "os",
|
||||
probability: 1,
|
||||
condition: /os$/,
|
||||
action: (noun: string) => {
|
||||
const root = trimVowels(noun.slice(0, -2), 0);
|
||||
if (root.length < 4) return noun.slice(0, -1);
|
||||
return `${root}ian`;
|
||||
},
|
||||
},
|
||||
{
|
||||
name: "es",
|
||||
probability: 1,
|
||||
condition: /es$/,
|
||||
action: (noun: string) => {
|
||||
const root = trimVowels(noun.slice(0, -2), 0);
|
||||
if (root.length > 7) return noun.slice(0, -1);
|
||||
return `${root}ian`;
|
||||
},
|
||||
},
|
||||
{
|
||||
name: "l",
|
||||
probability: 0.8,
|
||||
condition: /l$/,
|
||||
action: (noun: string) => `${noun}ese`,
|
||||
},
|
||||
{
|
||||
name: "n",
|
||||
probability: 0.8,
|
||||
condition: /n$/,
|
||||
action: (noun: string) => `${noun}ese`,
|
||||
},
|
||||
{
|
||||
name: "ad",
|
||||
probability: 0.8,
|
||||
condition: /ad$/,
|
||||
action: (noun: string) => `${noun}ian`,
|
||||
},
|
||||
{
|
||||
name: "an",
|
||||
probability: 0.8,
|
||||
condition: /an$/,
|
||||
action: (noun: string) => `${noun}ian`,
|
||||
},
|
||||
{
|
||||
name: "ish",
|
||||
probability: 0.25,
|
||||
condition: /^[a-zA-Z]{6}$/,
|
||||
action: (noun: string) => `${trimVowels(noun.slice(0, -1))}ish`,
|
||||
},
|
||||
{
|
||||
name: "an",
|
||||
probability: 0.5,
|
||||
condition: /^[a-zA-Z]{0,7}$/,
|
||||
action: (noun: string) => `${trimVowels(noun)}an`,
|
||||
},
|
||||
],
|
||||
fr: [
|
||||
{
|
||||
name: "guo",
|
||||
probability: 1,
|
||||
condition: / Guo$/,
|
||||
action: (noun: string) => noun.slice(0, -4),
|
||||
},
|
||||
{
|
||||
name: "orszag",
|
||||
probability: 1,
|
||||
condition: /orszag$/,
|
||||
action: (noun: string) =>
|
||||
noun.length < 9 ? `${noun}ian` : noun.slice(0, -6),
|
||||
},
|
||||
{
|
||||
name: "stan",
|
||||
probability: 1,
|
||||
condition: /stan$/,
|
||||
action: (noun: string) => `${noun}ais`,
|
||||
},
|
||||
{
|
||||
name: "land",
|
||||
probability: 1,
|
||||
condition: /land$/,
|
||||
action: (noun: string) => `${noun}ais`,
|
||||
},
|
||||
{
|
||||
name: "que",
|
||||
probability: 1,
|
||||
condition: /que$/,
|
||||
action: (noun: string) => noun.replace(/que$/, "cain"),
|
||||
},
|
||||
{
|
||||
name: "ia",
|
||||
probability: 1,
|
||||
condition: /ia$/,
|
||||
action: (noun: string) => noun.replace(/a$/, "en"),
|
||||
},
|
||||
{
|
||||
name: "a",
|
||||
probability: 1,
|
||||
condition: /a$/,
|
||||
action: (noun: string) => `${noun}n`,
|
||||
},
|
||||
{
|
||||
name: "o",
|
||||
probability: 1,
|
||||
condition: /o$/,
|
||||
action: (noun: string) => `${noun}lais`,
|
||||
},
|
||||
{
|
||||
name: "u",
|
||||
probability: 1,
|
||||
condition: /u$/,
|
||||
action: (noun: string) => `${noun}en`,
|
||||
},
|
||||
{
|
||||
name: "i",
|
||||
probability: 1,
|
||||
condition: /i$/,
|
||||
action: (noun: string) => `${noun}en`,
|
||||
},
|
||||
{
|
||||
name: "ie",
|
||||
probability: 1,
|
||||
condition: /e$/,
|
||||
action: (noun: string) => `${noun}n`,
|
||||
},
|
||||
{
|
||||
name: "e",
|
||||
probability: 0.5,
|
||||
condition: /e$/,
|
||||
action: (noun: string) => noun.replace(/e$/, "ais"),
|
||||
},
|
||||
{
|
||||
name: "e",
|
||||
probability: 0.5,
|
||||
condition: /e$/,
|
||||
action: (noun: string) => noun.replace(/e$/, "ois"),
|
||||
},
|
||||
{
|
||||
name: "e",
|
||||
probability: 0.5,
|
||||
condition: /e$/,
|
||||
action: (noun: string) => noun.replace(/e$/, "ien"),
|
||||
},
|
||||
{
|
||||
name: "e",
|
||||
probability: 1,
|
||||
condition: /e$/,
|
||||
action: (noun: string) => noun.replace(/e$/, "éen"),
|
||||
},
|
||||
{
|
||||
name: "ay",
|
||||
probability: 1,
|
||||
condition: /ay$/,
|
||||
action: (noun: string) => `${noun}en`,
|
||||
},
|
||||
{
|
||||
name: "os",
|
||||
probability: 1,
|
||||
condition: /os$/,
|
||||
action: (noun: string) => {
|
||||
const root = trimVowels(noun.slice(0, -2), 0);
|
||||
if (root.length < 4) return noun.slice(0, -1);
|
||||
return `${root}ien`;
|
||||
},
|
||||
},
|
||||
{
|
||||
name: "es",
|
||||
probability: 1,
|
||||
condition: /es$/,
|
||||
action: (noun: string) => {
|
||||
const root = trimVowels(noun.slice(0, -2), 0);
|
||||
if (root.length > 7) return noun.slice(0, -1);
|
||||
return `${root}ien`;
|
||||
},
|
||||
},
|
||||
{
|
||||
name: "l",
|
||||
probability: 0.8,
|
||||
condition: /l$/,
|
||||
action: (noun: string) => `${noun}ais`,
|
||||
},
|
||||
{
|
||||
name: "n",
|
||||
probability: 0.8,
|
||||
condition: /n$/,
|
||||
action: (noun: string) => `${noun}ais`,
|
||||
},
|
||||
{
|
||||
name: "n",
|
||||
probability: 0.5,
|
||||
condition: /n$/,
|
||||
action: (noun: string) => `${noun}ois`,
|
||||
},
|
||||
{
|
||||
name: "ad",
|
||||
probability: 0.8,
|
||||
condition: /ad$/,
|
||||
action: (noun: string) => `${noun}ien`,
|
||||
},
|
||||
{
|
||||
name: "an",
|
||||
probability: 0.8,
|
||||
condition: /an$/,
|
||||
action: (noun: string) => `${noun}ien`,
|
||||
},
|
||||
{
|
||||
name: "ish",
|
||||
probability: 0.25,
|
||||
condition: /^[a-zA-Z]{6}$/,
|
||||
action: (noun: string) => `${trimVowels(noun.slice(0, -1))}ish`,
|
||||
},
|
||||
{
|
||||
name: "an",
|
||||
probability: 0.5,
|
||||
condition: /^[a-zA-Z]{0,7}$/,
|
||||
action: (noun: string) => `${trimVowels(noun)}an`,
|
||||
},
|
||||
],
|
||||
};
|
||||
for (const rule of adjectivizationRules[window.locale]) {
|
||||
if (P(rule.probability) && rule.condition.test(nounToBeAdjective)) {
|
||||
return rule.action(nounToBeAdjective);
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue