Vulgar: Language generator

Custom Words, Affixes and Morphology

Adding new words

Use the Add and remove words field to add a custom word to your language. Use the format new word (in English) : part-of-speech, eg:

  queen : n
  conlang, constructed language : n

All words must have a part-of-speech (n = noun, v = verb, etc) to be valid. To specify what the conlang word will actually be, add = conlang word (in IPA), eg:

  queen : n = kalisi

This assumes kalisi is the pronunciation of the word, not the surface spelling. If the English word is already in the default vocab, specifying the IPA will overwrite the default word so that there is only ever one translation for “queen”. If you wish for your custom entry to be a second translation, write += instead of =, eg:

  queen : n += kalisi

The += method also works for derived words (see below).

Remove default English words with the minus symbol.

  -queen

Adding the part-of-speech is not necessary here, unless the word has two parts-of-speech and you only want to remove one.

Derived words

“Derived words” are words that are built out of other words. For example, “government” is a noun which is built by combining the verb “govern” with the affix “-ment”. Use the Derived words field whenever you need to pull a word from the dictionary and combine it with an affix, or with another word.

Compound words

Use the plus + and ampersand & signs to create compound words. Example: Let’s say your word for “war” is kara and your word for “God” is kin, and you want a compound of those words karakin to mean “God of War”. Use the following syntax:

  God of War : n = war+god - to create a single compound word
  God of War : n = war&god - to create a compound word but separated by a space

Adding affixes to words

Add affixes to words to create derived words as new word : part-of-speech = existing word-AFFIX.TAG:

  government : n = govern-ACT.OF

Vulgar has various default affixes already populated in the Add or modify affixes input box. You can create brand new affixes in this box. For instance, Vulgar does not automatically create an affix for the opposite of something, as in English’s “un-” prefix. So you may choose to create this affix in Add or modify affixes:

  OPPOSITE = Random

This affix tag must be in capitals (to distinguish it from a word) and can optionally have numbers or a full stop. = Random means Vulgar will randomly create the affix for you. You can now use -OPPOSITE on words back in the Derived words box:

  unhappy : adj = happy-OPPOSITE
  uncommon : adj = common-OPPOSITE

Be creative with affixes! Maybe your language uses affixes for things instead of full words, like:

  royal palace : n = house-ROYAL
  royal servant: n = servant-ROYAL

Affixes can be stacked on each other:

  unhappiness : n = happy-QUALITY.OF.BEING-OPPOSITE

In this scenario, QUALITY.OF.BEING first changes “happy” to “happiness”, then the OPPOSITE affix is added.

If the word you’re trying to pull from the dictionary has two possible parts of speech (such as “laugh” as a verb and “laugh” as a noun), you can specify the part of speech like this:

  laughing : v = laugh:v-PROGRESSIVE

Defining affixes

In stead of using = Random, you can define what your custom affixes actually are in the following format:

  OPPOSITE = -s

This will change ama to amas

To create a prefix, attach the - symbol to end of the affix:

  OPPOSITE = s-

This would change ama to sama. Even though this is a prefix, the affix tag can be positioned after the word, eg happy-OPPOSITE, although OPPOSITE-happy is also valid.

Multiple processes can by applied by comma separating the commands. The following two step process attaches a prefix and a suffix, to create a circumfix:

  OPPOSITE = s-, -s

This would change ama to samas. Again, the OPPOSITE tag can be positioned before or after the word, however I suggest putting everything after, for consistency.

Sound changes

Sound changes can be encoded into an affix tag using the > symbol

  OPPOSITE = a > i

In this example, ama would change to ami. The left side of the > symbol is RegEx capable, so any RegEx patterns can be used to create advanced sound changes. If you don't know what RegEx is, read up on it here. Be aware that unlike the RegEx in the Spelling Rules, these patterns are not “global”, meaning they do not change every match. Instead, > is pre-programmed change the final match in the word, where as < will change the first match in the word. Thus, a > i changes ama to ami, while a < i changes ama to ima.

The sound change step can be combined with affix steps. That is why it’s important to comma separate the steps (and it has to be a comma + a space, to distinguish it from commas that have special meaning in RegEx):

  OPPOSITE = a > i, -s

This would change ama to amis.

A choice between random affixes can be created using the bar symbol |. The following rule adds either an -s, -t or -p as the affix:

  OPPOSITE = -s|-t|-p

Similarly, the resulting sound change can be randomised with the | symbol:

  OPPOSITE = a > i|o|e

Conditional IF and ELSE statements

There may be scenarios where you want to create conditional rules. You can do this based on whether a RegEx pattern matches using the following syntax:

  AFFIX.NAME = IF [this regex pattern is in the word] THEN [apply this set of rules] ELSE [apply this set of rules]

For instance, let’s say your prefix is s-, but if the root word already starts in an s you want to the prefix to sa- to avoid a double s. In RegEx, the ^ symbol represents beginning of a word. So we can say:

  OPPOSITE = IF ^s THEN se- ELSE s-

This changes sama to sesama, while ama changes to sama. Note that IF, THEN and ELSE must be capitalised.

The ELSE condition is optional and can be omitted. Multiple IF statements are permitted:

  OPPOSITE = IF ^s THEN sa- IF ^z THEN so- ELSE s-

(For the programmers reading this, secondary IF statements are technically ELSE IF statements.)

Shorthand uppercase symbols can be used for classes of phonemes, for instance C to mean “any consonant” and V to mean “any vowel”.

  OPPOSITE = IF ^C THEN sa- ELSE s-

This means IF the root words stars with a consonant, apply sa-, ELSE if it begins with a vowel apply s-.

IF statements can apply affixes that match the vowel harmony of root word. Let’s say you have a vowel harmony system of front vowels (i, e, a) and back vowels (u, o). IF [iea] will simply test for the presence of any of those vowels in the word, from there you can apply an affix that matches the vowel harmony:

  OPPOSITE = IF [iea] THEN -sa ELSE -so

Stem words

Sometimes you may want to create a stem word that doesn’t exist as a stand-alone dictionary entry, but that is only found with affixes attached to it. The example in English would be words like “absence” and “absent”, where it is somewhat unclear which word is derived from which, and may instead be interpreted as a stem “absen-” attaching to affixes “-ce” and “-t”. To create a stem, instead of writing the dictionary word that the affix attaches to, create a new stem tag with the ! symbol. Example:

  absence : n = !newStem-CUSTOM.NOUN.AFFIX

  absent : adj = !newStem-CUSTOM.ADJ.AFFIX

This will randomly generate a stem word for the !newStem tag. Just like creating a unique affix, the stem can be named anything, but does not have to be in upper case. If you want to actually specify what the stem word is in the conlang, you can define it before using it, much the same was you define an affix before using it:

  !newStem = aku