diff --git a/RandomFactor.php b/RandomFactor.php
index 829e971..90fd74e 100644
--- a/RandomFactor.php
+++ b/RandomFactor.php
@@ -1,9 +1,13 @@
language($lang)
+ ->spacing($spacing)
+ ->adjectives($adjectives)
+ ->nouns($nouns)
+ ->generate();
+ }
+}
diff --git a/composer.json b/composer.json
index 1df72a2..285feca 100644
--- a/composer.json
+++ b/composer.json
@@ -19,6 +19,9 @@
"issues": "https:\/\/github.com\/marcusirgens\/RandomFactor\/issues"
},
"autoload": {
+ "psr-4": {
+ "marcuspi\\RandomFactor\\": "src/marcuspi/RandomFactor/"
+ },
"files": [
"RandomFactor.php"
]
diff --git a/src/Core.php b/src/Core.php
deleted file mode 100644
index 8120b37..0000000
--- a/src/Core.php
+++ /dev/null
@@ -1,56 +0,0 @@
- 'no',
- 'en' => 'en'
- ];
-
- private static $adjectives = [];
- private static $nouns = [];
-
- private static $adjective_count = 0;
- private static $noun_count = 0;
-
- private static $imported_lang = '';
- private static $imported = false;
-
- public static function generate($lang, $spacing, $adjectives, $nouns) {
-
- // Doing this check here increases performance
- if((self::$imported_lang != $lang) || !self::$imported) {
- self::import_lang($lang);
- }
-
- return self::$adjectives[rand(0, self::$adjective_count - 1)] .
- $spacing .
- self::$nouns[rand(0, self::$noun_count - 1)];
-
- }
-
- private static function import_lang($lang) {
- if (!in_array($lang, self::$languages)) {
- throw new \Exception('Language ' . $lang . ' not found');
- }
-
- if (!file_exists(__DIR__ . '/lang/' . $lang . '.json')) {
- throw new \Exception('Language file ' . __DIR__ . '/lang/' . $lang . '.json not found');
- }
-
- $wordlist = json_decode(file_get_contents(__DIR__ . '/lang/' . $lang . '.json'), TRUE);
-
- self::$adjectives = $wordlist['adjectives'];
- self::$adjective_count = $wordlist['data']['count']['adjectives'];
-
- self::$nouns = $wordlist['nouns'];
- self::$noun_count = $wordlist['data']['count']['nouns'];
-
- self::$imported_lang = $lang;
- self::$imported = true;
-
- }
-}
-?>
\ No newline at end of file
diff --git a/src/lang/en.json b/src/lang/en.json
deleted file mode 100644
index 7138bda..0000000
--- a/src/lang/en.json
+++ /dev/null
@@ -1 +0,0 @@
-{"adjectives":["acceptable","according","accurate","active","actual","additional","administrative","adult","after","alive","alternative","amazing","annual","another","automatic","available","aware","basic","beautiful","beginning","best","better","big","brave","brief","bright","brilliant","business","calm","capable","careful","certain","chemical","civil","classic","clear","close","comfortable","commercial","common","competitive","complete","complex","comprehensive","confident","conscious","consistent","constant","cool","crazy","creative","critical","cultural","curious","current","cute","dark","dear","decent","dependent","different","direct","distinct","downtown","easy","economy","educational","effective","either","electronic","environmental","equal","even","every","exact","excellent","exciting","existing","expensive","external","extra","extreme","fair","false","familiar","famous","fast","federal","female","final","financial","flat","foreign","formal","former","free","fresh","friendly","full","funny","future","general","global","good","grand","great","green","guilty","happy","hard","head","healthy","heavy","helpful","historical","home","honest","hot","human","hungry","immediate","important","impressive","independent","individual","informal","initial","intelligent","interesting","internal","international","junior","key","kind","known","last","late","leading","least","less","level","little","logical","loud","lucky","major","many","massive","medical","middle","mobile","narrow","national","natural","nearby","neat","necessary","new","nice","normal","numerous","objective","obvious","official","open","ordinary","original","particular","perfect","personal","pleasant","political","popular","positive","potential","powerful","practical","present","pretty","previous","primary","private","professional","proper","proud","public","pure","quick","quiet","rare","real","realistic","reasonable","recent","relevant","remarkable","representative","responsible","rich","right","royal","safe","same","secret","secure","sensitive","serious","sharp","significant","simple","slight","smart","smooth","soft","southern","spare","special","spiritual","straight","strict","strong","successful","suitable","super","sure","suspicious","sweet","tall","technical","tiny","tough","traditional","true","used","useful","valuable","various","vast","visible","warm","wise","wonderful","wooden","working","young"],"nouns":["ability","accident","activity","actor","ad","addition","administration","advertising","advice","affair","agency","agreement","airport","alcohol","ambition","analysis","analyst","anxiety","apartment","appearance","apple","application","appointment","area","argument","army","arrival","art","article","aspect","assignment","assistance","assistant","association","assumption","atmosphere","attention","attitude","audience","awareness","baseball","basis","basket","bath","bathroom","bedroom","beer","bird","birthday","bonus","bread","breath","buyer","cabinet","camera","candidate","category","celebration","championship","chapter","charity","cheek","chemistry","chest","child","childhood","chocolate","church","city","classroom","client","climate","clothes","coffee","collection","college","combination","committee","communication","community","comparison","competition","complaint","computer","concept","conclusion","connection","consequence","construction","context","contract","contribution","control","conversation","cookie","country","county","courage","cousin","criticism","currency","customer","dad","data","database","decision","definition","delivery","department","departure","depression","depth","description","desk","development","device","diamond","difference","dinner","direction","director","dirt","discussion","disk","distribution","drawer","drawing","driver","ear","economics","editor","education","efficiency","effort","election","elevator","emotion","emphasis","employee","employer","employment","energy","engine","engineering","entertainment","enthusiasm","entry","environment","equipment","establishment","estate","event","exam","examination","excitement","explanation","expression","extent","fact","family","farmer","feedback","finding","fishing","flight","food","football","fortune","foundation","freedom","friendship","funeral","garbage","gate","gene","goal","government","grandmother","grocery","growth","guest","guidance","guitar","hair","hall","hat","health","hearing","heart","height","highway","historian","history","homework","honey","hotel","housing","idea","imagination","importance","impression","improvement","income","independence","indication","industry","information","initiative","inspection","instance","instruction","insurance","intention","interaction","internet","introduction","investment","judgment","king","knowledge","lab","ladder","lady","lake","language","law","leader","leadership","length","library","literature","location","loss","love","magazine","maintenance","mall","management","manager","manufacturer","map","marketing","marriage","math","meal","meaning","measurement","meat","media","medicine","member","membership","memory","menu","message","method","midnight","mixture","mode","mom","moment","month","mood","movie","music","nation","nature","negotiation","news","newspaper","night","obligation","office","operation","opinion","opportunity","orange","organization","outcome","oven","owner","painting","paper","passenger","passion","patience","payment","penalty","people","percentage","perception","performance","permission","person","personality","perspective","philosophy","phone","photo","physics","piano","pie","pizza","platform","player","poem","poet","poetry","police","politics","pollution","population","possession","possibility","potato","power","preference","preparation","presence","presentation","president","priority","problem","procedure","product","profession","professor","promotion","property","proposal","protection","psychology","quality","quantity","queen","ratio","reaction","reading","reality","reception","recipe","recognition","recommendation","recording","reflection","refrigerator","region","relation","relationship","replacement","republic","reputation","requirement","resolution","resource","response","responsibility","restaurant","revenue","revolution","river","road","role","safety","salad","sample","satisfaction","scene","science","secretary","security","selection","series","session","setting","shirt","shopping","signature","significance","singer","situation","skill","society","software","solution","song","soup","speaker","speech","statement","steak","storage","story","strategy","student","studio","success","suggestion","supermarket","surgery","sympathy","system","teacher","technology","television","temperature","tennis","tension","theory","thing","thought","tongue","tooth","topic","town","tradition","trainer","transportation","truth","two","understanding","unit","university","user","variation","variety","vehicle","version","video","village","volume","warning","weakness","wealth","wedding","week","winner","wood","worker","world","writer","writing","year","youth"],"data":{"count":{"adjectives":245,"nouns":444},"combinations":108780}}
\ No newline at end of file
diff --git a/src/lang/no.json b/src/lang/no.json
deleted file mode 100644
index f316aff..0000000
--- a/src/lang/no.json
+++ /dev/null
@@ -1 +0,0 @@
-{"adjectives":["aktiv","allsidig","artig","bra","deilig","dyktig","edel","ekstra","elegant","elskverdig","erfaren","erten","evig","fair","fantastisk","fin","fleksibel","flink","fornem","freidig","fri","frisk","glad","glatt","god","grei","habil","halv","heldig","historisk","human","hurtig","iherdig","intelligent","jovial","kanon","klar","klok","komparativ","komplett","konge","konservativ","kontkret","korrekt","koselig","kristen","kul","liberal","lik","litt","lun","masse","mobil","moden","moderne","modig","myk","neste","normal","nyttig","offisiell","ordentlig","original","passe","pen","personlig","presis","proaktiv","proff","pussig","radikal","rask","reaktiv","real","relevant","rett","rettferdig","rik","rolig","rund","schpaa","sikker","smart","snar","snill","sosial","spenstig","sterk","stilig","stille","stor","sunn","tillitsfull","topp","trofast","tung","ung","urban","uselvisk","utrolig","vakker","varm","veldig","vennlig","virtuell","yr"],"nouns":["agurk","antilope","avis","badeand","ball","bank","barista","bergenser","betjent","bie","bil","blokk","boble","bok","bokorm","bolle","breiflabb","brus","bukse","burger","buss","butikk","by","bygd","chat","dagbok","datamaskin","dekan","delegat","disco","domstol","dopplereffekt","drage","dyne","eier","elefant","engel","familie","farmor","fiolin","fisk","fjellheim","fjord","flaske","flyplass","fotball","frykt","fryser","fugl","furu","galakse","gane","garanti","gave","grevling","grotte","hai","harpe","hatt","hest","horde","hund","informasjon","inntekt","jordmor","julefeiring","jurist","jury","juvel","kamerat","kanon","karaffel","kasse","katt","kino","klementin","kollega","komfyr","ku","kunst","liberalist","lunsj","mandolin","meny","moskus","nettside","okse","oldefar","oppfinnelse","optikk","ordstyrer","ovn","park","pasient","person","planet","plante","plommme","porto","pose","prest","pris","reklame","rektor","religion","representant","rev","ring","rot","saks","salamander","satellitt","sebra","seigmann","sekk","selger","singlet","sjokolade","skala","snutt","statsminister","stjerne","stol","storm","strikk","struts","student","substans","svoger","sykepleier","taco","tann","tapir","telefon","tiger","tolk","tornado","trapp","trikk","ulv","underviser","uttale","vask","vertinne","vors"],"data":{"count":{"adjectives":106,"nouns":145},"combinations":15370}}
\ No newline at end of file
diff --git a/src/marcuspi/RandomFactor/Words.php b/src/marcuspi/RandomFactor/Words.php
new file mode 100644
index 0000000..9dada6e
--- /dev/null
+++ b/src/marcuspi/RandomFactor/Words.php
@@ -0,0 +1,160 @@
+ 'no-nb',
+ 'en' => 'en'
+ ];
+
+ private $language;
+ private $spacing;
+ private $nouns;
+ private $adjectives;
+
+ /**
+ * Creates new Words.
+ *
+ * @access public
+ * @param string $language The language to use (default: "en")
+ * @param string $spacing Character(s) to used to split the words (default: " ")
+ * @param int $nouns Number of nouns (default: 1)
+ * @param int $adjectives Number of adjectives (default: 1)
+ */
+ public function __construct($language = "en", $spacing = " ", $nouns = 1, $adjectives = 1)
+ {
+ $this->language($language);
+ $this->spacing($spacing);
+ $this->nouns($nouns);
+ $this->adjectives($adjectives);
+ }
+
+ /**
+ * Sets which language that should be used
+ *
+ * @access public
+ * @param string $language One of "no", "en".
+ * @return self
+ */
+ public function language(string $language): Words
+ {
+ if (!array_key_exists(mb_strtolower($language), static::$languages)) {
+ throw new \Exception('Language \'' . $language . '\' not found');
+ }
+
+ $this->language = mb_strtolower($language);
+
+ return $this;
+ }
+
+ /**
+ * Sets the character(s) to used to split the words
+ *
+ * @access public
+ * @param string $spacing
+ * @return self
+ */
+ public function spacing(string $spacing): Words
+ {
+ $this->spacing = $spacing;
+
+ return $this;
+ }
+
+ /**
+ * Sets the number of nouns
+ *
+ * @access public
+ * @param int $nouns A positive integer
+ * @return self
+ */
+ public function nouns(int $nouns): Words
+ {
+ if ($nouns < 0) {
+ throw new \Exception('Number of nouns must be a positive integer');
+ }
+
+ $this->nouns = $nouns;
+
+ return $this;
+ }
+
+ /**
+ * Sets the number of adjectives
+ *
+ * @access public
+ * @param int $adjectives A positive integer
+ * @return self
+ */
+ public function adjectives(int $adjectives): Words
+ {
+ if ($adjectives < 0) {
+ throw new \Exception('Number of adjectives must be a positive integer');
+ }
+
+ $this->adjectives = $adjectives;
+
+ return $this;
+ }
+
+ /**
+ * Static creation.
+ *
+ * @access public
+ * @static
+ * @return self
+ */
+ public static function create()
+ {
+ return new static;
+ }
+
+ /**
+ * Generates the random words.
+ *
+ * @access public
+ * @return string
+ */
+ public function generate(): string
+ {
+
+ $wordlist = $this->readWordList();
+
+ $words = [];
+
+ for ($i = 0; $i < $this->adjectives; $i++) {
+ $words[] = $wordlist['adjectives'][random_int(0, count($wordlist['adjectives']) - 1)];
+ }
+
+ for ($i = 0; $i < $this->nouns; $i++) {
+ $words[] = $wordlist['nouns'][random_int(0, count($wordlist['nouns']) - 1)];
+ }
+
+ return implode($this->spacing, $words);
+ }
+
+ /**
+ * Alias for self::generate()
+ *
+ * @access public
+ * @return string
+ */
+ public function __toString(): string
+ {
+ return $this->generate();
+ }
+
+ private function readWordList(): array
+ {
+ $wordfile = __DIR__ . '/lang/' . static::$languages[$this->language] . '.json';
+
+ if (!file_exists($wordfile)) {
+ throw new \Exception('Language file \'' . $wordfile . '\' not found');
+ }
+
+ return json_decode(file_get_contents($wordfile), true);
+ }
+}
diff --git a/src/marcuspi/RandomFactor/lang/en.json b/src/marcuspi/RandomFactor/lang/en.json
new file mode 100644
index 0000000..bbdc0bb
--- /dev/null
+++ b/src/marcuspi/RandomFactor/lang/en.json
@@ -0,0 +1,695 @@
+{
+ "adjectives": [
+ "acceptable",
+ "according",
+ "accurate",
+ "active",
+ "actual",
+ "additional",
+ "administrative",
+ "adult",
+ "after",
+ "alive",
+ "alternative",
+ "amazing",
+ "annual",
+ "another",
+ "automatic",
+ "available",
+ "aware",
+ "basic",
+ "beautiful",
+ "beginning",
+ "best",
+ "better",
+ "big",
+ "brave",
+ "brief",
+ "bright",
+ "brilliant",
+ "business",
+ "calm",
+ "capable",
+ "careful",
+ "certain",
+ "chemical",
+ "civil",
+ "classic",
+ "clear",
+ "close",
+ "comfortable",
+ "commercial",
+ "common",
+ "competitive",
+ "complete",
+ "complex",
+ "comprehensive",
+ "confident",
+ "conscious",
+ "consistent",
+ "constant",
+ "cool",
+ "crazy",
+ "creative",
+ "critical",
+ "cultural",
+ "curious",
+ "current",
+ "cute",
+ "dark",
+ "dear",
+ "decent",
+ "dependent",
+ "different",
+ "direct",
+ "distinct",
+ "downtown",
+ "easy",
+ "economy",
+ "educational",
+ "effective",
+ "either",
+ "electronic",
+ "environmental",
+ "equal",
+ "even",
+ "every",
+ "exact",
+ "excellent",
+ "exciting",
+ "existing",
+ "expensive",
+ "external",
+ "extra",
+ "extreme",
+ "fair",
+ "false",
+ "familiar",
+ "famous",
+ "fast",
+ "federal",
+ "female",
+ "final",
+ "financial",
+ "flat",
+ "foreign",
+ "formal",
+ "former",
+ "free",
+ "fresh",
+ "friendly",
+ "full",
+ "funny",
+ "future",
+ "general",
+ "global",
+ "good",
+ "grand",
+ "great",
+ "green",
+ "guilty",
+ "happy",
+ "hard",
+ "head",
+ "healthy",
+ "heavy",
+ "helpful",
+ "historical",
+ "home",
+ "honest",
+ "hot",
+ "human",
+ "hungry",
+ "immediate",
+ "important",
+ "impressive",
+ "independent",
+ "individual",
+ "informal",
+ "initial",
+ "intelligent",
+ "interesting",
+ "internal",
+ "international",
+ "junior",
+ "key",
+ "kind",
+ "known",
+ "last",
+ "late",
+ "leading",
+ "least",
+ "less",
+ "level",
+ "little",
+ "logical",
+ "loud",
+ "lucky",
+ "major",
+ "many",
+ "massive",
+ "medical",
+ "middle",
+ "mobile",
+ "narrow",
+ "national",
+ "natural",
+ "nearby",
+ "neat",
+ "necessary",
+ "new",
+ "nice",
+ "normal",
+ "numerous",
+ "objective",
+ "obvious",
+ "official",
+ "open",
+ "ordinary",
+ "original",
+ "particular",
+ "perfect",
+ "personal",
+ "pleasant",
+ "political",
+ "popular",
+ "positive",
+ "potential",
+ "powerful",
+ "practical",
+ "present",
+ "pretty",
+ "previous",
+ "primary",
+ "private",
+ "professional",
+ "proper",
+ "proud",
+ "public",
+ "pure",
+ "quick",
+ "quiet",
+ "rare",
+ "real",
+ "realistic",
+ "reasonable",
+ "recent",
+ "relevant",
+ "remarkable",
+ "representative",
+ "responsible",
+ "rich",
+ "right",
+ "royal",
+ "safe",
+ "same",
+ "secret",
+ "secure",
+ "sensitive",
+ "serious",
+ "sharp",
+ "significant",
+ "simple",
+ "slight",
+ "smart",
+ "smooth",
+ "soft",
+ "southern",
+ "spare",
+ "special",
+ "spiritual",
+ "straight",
+ "strict",
+ "strong",
+ "successful",
+ "suitable",
+ "super",
+ "sure",
+ "suspicious",
+ "sweet",
+ "tall",
+ "technical",
+ "tiny",
+ "tough",
+ "traditional",
+ "true",
+ "used",
+ "useful",
+ "valuable",
+ "various",
+ "vast",
+ "visible",
+ "warm",
+ "wise",
+ "wonderful",
+ "wooden",
+ "working",
+ "young"
+ ],
+ "nouns": [
+ "ability",
+ "accident",
+ "activity",
+ "actor",
+ "ad",
+ "addition",
+ "administration",
+ "advertising",
+ "advice",
+ "affair",
+ "agency",
+ "agreement",
+ "airport",
+ "alcohol",
+ "ambition",
+ "analysis",
+ "analyst",
+ "anxiety",
+ "apartment",
+ "appearance",
+ "apple",
+ "application",
+ "appointment",
+ "area",
+ "argument",
+ "army",
+ "arrival",
+ "art",
+ "article",
+ "aspect",
+ "assignment",
+ "assistance",
+ "assistant",
+ "association",
+ "assumption",
+ "atmosphere",
+ "attention",
+ "attitude",
+ "audience",
+ "awareness",
+ "baseball",
+ "basis",
+ "basket",
+ "bath",
+ "bathroom",
+ "bedroom",
+ "beer",
+ "bird",
+ "birthday",
+ "bonus",
+ "bread",
+ "breath",
+ "buyer",
+ "cabinet",
+ "camera",
+ "candidate",
+ "category",
+ "celebration",
+ "championship",
+ "chapter",
+ "charity",
+ "cheek",
+ "chemistry",
+ "chest",
+ "child",
+ "childhood",
+ "chocolate",
+ "church",
+ "city",
+ "classroom",
+ "client",
+ "climate",
+ "clothes",
+ "coffee",
+ "collection",
+ "college",
+ "combination",
+ "committee",
+ "communication",
+ "community",
+ "comparison",
+ "competition",
+ "complaint",
+ "computer",
+ "concept",
+ "conclusion",
+ "connection",
+ "consequence",
+ "construction",
+ "context",
+ "contract",
+ "contribution",
+ "control",
+ "conversation",
+ "cookie",
+ "country",
+ "county",
+ "courage",
+ "cousin",
+ "criticism",
+ "currency",
+ "customer",
+ "dad",
+ "data",
+ "database",
+ "decision",
+ "definition",
+ "delivery",
+ "department",
+ "departure",
+ "depression",
+ "depth",
+ "description",
+ "desk",
+ "development",
+ "device",
+ "diamond",
+ "difference",
+ "dinner",
+ "direction",
+ "director",
+ "dirt",
+ "discussion",
+ "disk",
+ "distribution",
+ "drawer",
+ "drawing",
+ "driver",
+ "ear",
+ "economics",
+ "editor",
+ "education",
+ "efficiency",
+ "effort",
+ "election",
+ "elevator",
+ "emotion",
+ "emphasis",
+ "employee",
+ "employer",
+ "employment",
+ "energy",
+ "engine",
+ "engineering",
+ "entertainment",
+ "enthusiasm",
+ "entry",
+ "environment",
+ "equipment",
+ "establishment",
+ "estate",
+ "event",
+ "exam",
+ "examination",
+ "excitement",
+ "explanation",
+ "expression",
+ "extent",
+ "fact",
+ "family",
+ "farmer",
+ "feedback",
+ "finding",
+ "fishing",
+ "flight",
+ "food",
+ "football",
+ "fortune",
+ "foundation",
+ "freedom",
+ "friendship",
+ "funeral",
+ "garbage",
+ "gate",
+ "gene",
+ "goal",
+ "government",
+ "grandmother",
+ "grocery",
+ "growth",
+ "guest",
+ "guidance",
+ "guitar",
+ "hair",
+ "hall",
+ "hat",
+ "health",
+ "hearing",
+ "heart",
+ "height",
+ "highway",
+ "historian",
+ "history",
+ "homework",
+ "honey",
+ "hotel",
+ "housing",
+ "idea",
+ "imagination",
+ "importance",
+ "impression",
+ "improvement",
+ "income",
+ "independence",
+ "indication",
+ "industry",
+ "information",
+ "initiative",
+ "inspection",
+ "instance",
+ "instruction",
+ "insurance",
+ "intention",
+ "interaction",
+ "internet",
+ "introduction",
+ "investment",
+ "judgment",
+ "king",
+ "knowledge",
+ "lab",
+ "ladder",
+ "lady",
+ "lake",
+ "language",
+ "law",
+ "leader",
+ "leadership",
+ "length",
+ "library",
+ "literature",
+ "location",
+ "loss",
+ "love",
+ "magazine",
+ "maintenance",
+ "mall",
+ "management",
+ "manager",
+ "manufacturer",
+ "map",
+ "marketing",
+ "marriage",
+ "math",
+ "meal",
+ "meaning",
+ "measurement",
+ "meat",
+ "media",
+ "medicine",
+ "member",
+ "membership",
+ "memory",
+ "menu",
+ "message",
+ "method",
+ "midnight",
+ "mixture",
+ "mode",
+ "mom",
+ "moment",
+ "month",
+ "mood",
+ "movie",
+ "music",
+ "nation",
+ "nature",
+ "negotiation",
+ "news",
+ "newspaper",
+ "night",
+ "obligation",
+ "office",
+ "operation",
+ "opinion",
+ "opportunity",
+ "orange",
+ "organization",
+ "outcome",
+ "oven",
+ "owner",
+ "painting",
+ "paper",
+ "passenger",
+ "passion",
+ "patience",
+ "payment",
+ "penalty",
+ "people",
+ "percentage",
+ "perception",
+ "performance",
+ "permission",
+ "person",
+ "personality",
+ "perspective",
+ "philosophy",
+ "phone",
+ "photo",
+ "physics",
+ "piano",
+ "pie",
+ "pizza",
+ "platform",
+ "player",
+ "poem",
+ "poet",
+ "poetry",
+ "police",
+ "politics",
+ "pollution",
+ "population",
+ "possession",
+ "possibility",
+ "potato",
+ "power",
+ "preference",
+ "preparation",
+ "presence",
+ "presentation",
+ "president",
+ "priority",
+ "problem",
+ "procedure",
+ "product",
+ "profession",
+ "professor",
+ "promotion",
+ "property",
+ "proposal",
+ "protection",
+ "psychology",
+ "quality",
+ "quantity",
+ "queen",
+ "ratio",
+ "reaction",
+ "reading",
+ "reality",
+ "reception",
+ "recipe",
+ "recognition",
+ "recommendation",
+ "recording",
+ "reflection",
+ "refrigerator",
+ "region",
+ "relation",
+ "relationship",
+ "replacement",
+ "republic",
+ "reputation",
+ "requirement",
+ "resolution",
+ "resource",
+ "response",
+ "responsibility",
+ "restaurant",
+ "revenue",
+ "revolution",
+ "river",
+ "road",
+ "role",
+ "safety",
+ "salad",
+ "sample",
+ "satisfaction",
+ "scene",
+ "science",
+ "secretary",
+ "security",
+ "selection",
+ "series",
+ "session",
+ "setting",
+ "shirt",
+ "shopping",
+ "signature",
+ "significance",
+ "singer",
+ "situation",
+ "skill",
+ "society",
+ "software",
+ "solution",
+ "song",
+ "soup",
+ "speaker",
+ "speech",
+ "statement",
+ "steak",
+ "storage",
+ "story",
+ "strategy",
+ "student",
+ "studio",
+ "success",
+ "suggestion",
+ "supermarket",
+ "surgery",
+ "sympathy",
+ "system",
+ "teacher",
+ "technology",
+ "television",
+ "temperature",
+ "tennis",
+ "tension",
+ "theory",
+ "thing",
+ "thought",
+ "tongue",
+ "tooth",
+ "topic",
+ "town",
+ "tradition",
+ "trainer",
+ "transportation",
+ "truth",
+ "two",
+ "understanding",
+ "unit",
+ "university",
+ "user",
+ "variation",
+ "variety",
+ "vehicle",
+ "version",
+ "video",
+ "village",
+ "volume",
+ "warning",
+ "weakness",
+ "wealth",
+ "wedding",
+ "week",
+ "winner",
+ "wood",
+ "worker",
+ "world",
+ "writer",
+ "writing",
+ "year",
+ "youth"
+ ]
+}
\ No newline at end of file
diff --git a/src/marcuspi/RandomFactor/lang/no-nb.json b/src/marcuspi/RandomFactor/lang/no-nb.json
new file mode 100644
index 0000000..932ca63
--- /dev/null
+++ b/src/marcuspi/RandomFactor/lang/no-nb.json
@@ -0,0 +1,257 @@
+{
+ "adjectives": [
+ "aktiv",
+ "allsidig",
+ "artig",
+ "bra",
+ "deilig",
+ "dyktig",
+ "edel",
+ "ekstra",
+ "elegant",
+ "elskverdig",
+ "erfaren",
+ "erten",
+ "evig",
+ "fair",
+ "fantastisk",
+ "fin",
+ "fleksibel",
+ "flink",
+ "fornem",
+ "freidig",
+ "fri",
+ "frisk",
+ "glad",
+ "glatt",
+ "god",
+ "grei",
+ "habil",
+ "halv",
+ "heldig",
+ "historisk",
+ "human",
+ "hurtig",
+ "iherdig",
+ "intelligent",
+ "jovial",
+ "kanon",
+ "klar",
+ "klok",
+ "komparativ",
+ "komplett",
+ "konge",
+ "konservativ",
+ "kontkret",
+ "korrekt",
+ "koselig",
+ "kristen",
+ "kul",
+ "liberal",
+ "lik",
+ "litt",
+ "lun",
+ "masse",
+ "mobil",
+ "moden",
+ "moderne",
+ "modig",
+ "myk",
+ "neste",
+ "normal",
+ "nyttig",
+ "offisiell",
+ "ordentlig",
+ "original",
+ "passe",
+ "pen",
+ "personlig",
+ "presis",
+ "proaktiv",
+ "proff",
+ "pussig",
+ "radikal",
+ "rask",
+ "reaktiv",
+ "real",
+ "relevant",
+ "rett",
+ "rettferdig",
+ "rik",
+ "rolig",
+ "rund",
+ "schpaa",
+ "sikker",
+ "smart",
+ "snar",
+ "snill",
+ "sosial",
+ "spenstig",
+ "sterk",
+ "stilig",
+ "stille",
+ "stor",
+ "sunn",
+ "tillitsfull",
+ "topp",
+ "trofast",
+ "tung",
+ "ung",
+ "urban",
+ "uselvisk",
+ "utrolig",
+ "vakker",
+ "varm",
+ "veldig",
+ "vennlig",
+ "virtuell",
+ "yr"
+ ],
+ "nouns": [
+ "agurk",
+ "antilope",
+ "avis",
+ "badeand",
+ "ball",
+ "bank",
+ "barista",
+ "bergenser",
+ "betjent",
+ "bie",
+ "bil",
+ "blokk",
+ "boble",
+ "bok",
+ "bokorm",
+ "bolle",
+ "breiflabb",
+ "brus",
+ "bukse",
+ "burger",
+ "buss",
+ "butikk",
+ "by",
+ "bygd",
+ "chat",
+ "dagbok",
+ "datamaskin",
+ "dekan",
+ "delegat",
+ "disco",
+ "domstol",
+ "dopplereffekt",
+ "drage",
+ "dyne",
+ "eier",
+ "elefant",
+ "engel",
+ "familie",
+ "farmor",
+ "fiolin",
+ "fisk",
+ "fjellheim",
+ "fjord",
+ "flaske",
+ "flyplass",
+ "fotball",
+ "frykt",
+ "fryser",
+ "fugl",
+ "furu",
+ "galakse",
+ "gane",
+ "garanti",
+ "gave",
+ "grevling",
+ "grotte",
+ "hai",
+ "harpe",
+ "hatt",
+ "hest",
+ "horde",
+ "hund",
+ "informasjon",
+ "inntekt",
+ "jordmor",
+ "julefeiring",
+ "jurist",
+ "jury",
+ "juvel",
+ "kamerat",
+ "kanon",
+ "karaffel",
+ "kasse",
+ "katt",
+ "kino",
+ "klementin",
+ "kollega",
+ "komfyr",
+ "ku",
+ "kunst",
+ "liberalist",
+ "lunsj",
+ "mandolin",
+ "meny",
+ "moskus",
+ "nettside",
+ "okse",
+ "oldefar",
+ "oppfinnelse",
+ "optikk",
+ "ordstyrer",
+ "ovn",
+ "park",
+ "pasient",
+ "person",
+ "planet",
+ "plante",
+ "plommme",
+ "porto",
+ "pose",
+ "prest",
+ "pris",
+ "reklame",
+ "rektor",
+ "religion",
+ "representant",
+ "rev",
+ "ring",
+ "rot",
+ "saks",
+ "salamander",
+ "satellitt",
+ "sebra",
+ "seigmann",
+ "sekk",
+ "selger",
+ "singlet",
+ "sjokolade",
+ "skala",
+ "snutt",
+ "statsminister",
+ "stjerne",
+ "stol",
+ "storm",
+ "strikk",
+ "struts",
+ "student",
+ "substans",
+ "svoger",
+ "sykepleier",
+ "taco",
+ "tann",
+ "tapir",
+ "telefon",
+ "tiger",
+ "tolk",
+ "tornado",
+ "trapp",
+ "trikk",
+ "ulv",
+ "underviser",
+ "uttale",
+ "vask",
+ "vertinne",
+ "vors"
+ ]
+}
\ No newline at end of file