baseDirectory = $baseDirectory; $this->translationDriver = $translationDriver ?? new GettextExtensionDriver(); } /** * ISO 3166-1 */ public function getCountries(): Countries { return new Countries($this->baseDirectory, $this->translationDriver); } /** * ISO 3166-2 * * @param int $optimisation One of self::OPTIMISATION_* constants * * @throws \InvalidArgumentException When invalid optimisation specified */ public function getSubdivisions(int $optimisation = self::OPTIMISATION_MEMORY): SubdivisionsInterface { switch ($optimisation) { case self::OPTIMISATION_MEMORY: $database = new SubdivisionsPartitioned($this->baseDirectory, $this->translationDriver); break; case self::OPTIMISATION_IO: $database = new Subdivisions($this->baseDirectory, $this->translationDriver); break; default: throw new \InvalidArgumentException('Invalid optimisation specified'); } return $database; } /** * ISO 3166-3 */ public function getHistoricCountries(): HistoricCountries { return new HistoricCountries($this->baseDirectory, $this->translationDriver); } /** * ISO 15924 */ public function getScripts(): Scripts { return new Scripts($this->baseDirectory, $this->translationDriver); } /** * ISO 4217 */ public function getCurrencies(): Currencies { return new Currencies($this->baseDirectory, $this->translationDriver); } /** * ISO 639-3 * * @param int $optimisation One of self::OPTIMISATION_* constants * * @throws \InvalidArgumentException When invalid optimisation specified */ public function getLanguages(int $optimisation = self::OPTIMISATION_MEMORY): LanguagesInterface { switch ($optimisation) { case self::OPTIMISATION_MEMORY: $database = new LanguagesPartitioned($this->baseDirectory, $this->translationDriver); break; case self::OPTIMISATION_IO: $database = new Languages($this->baseDirectory, $this->translationDriver); break; default: throw new \InvalidArgumentException('Invalid optimisation specified'); } return $database; } }