/**
  * Creates the a new Language in the content repository
  *
  * @throws \eZ\Publish\API\Repository\Exceptions\UnauthorizedException If user does not have access to content translations
  * @throws \eZ\Publish\API\Repository\Exceptions\InvalidArgumentException if the languageCode already exists
  *
  * @param \eZ\Publish\API\Repository\Values\Content\LanguageCreateStruct $languageCreateStruct
  *
  * @return \eZ\Publish\API\Repository\Values\Content\Language
  */
 public function createLanguage(LanguageCreateStruct $languageCreateStruct)
 {
     if (!is_string($languageCreateStruct->name) || empty($languageCreateStruct->name)) {
         throw new InvalidArgumentValue("name", $languageCreateStruct->name, "LanguageCreateStruct");
     }
     if (!is_string($languageCreateStruct->languageCode) || empty($languageCreateStruct->languageCode)) {
         throw new InvalidArgumentValue("languageCode", $languageCreateStruct->languageCode, "LanguageCreateStruct");
     }
     if (!is_bool($languageCreateStruct->enabled)) {
         throw new InvalidArgumentValue("enabled", $languageCreateStruct->enabled, "LanguageCreateStruct");
     }
     if ($this->repository->hasAccess('content', 'translations') !== true) {
         throw new UnauthorizedException('content', 'translations');
     }
     try {
         if ($this->loadLanguage($languageCreateStruct->languageCode) !== null) {
             throw new InvalidArgumentException("languageCreateStruct", "language with specified language code already exists");
         }
     } catch (APINotFoundException $e) {
         // Do nothing
     }
     $createStruct = new CreateStruct(array('languageCode' => $languageCreateStruct->languageCode, 'name' => $languageCreateStruct->name, 'isEnabled' => $languageCreateStruct->enabled));
     $this->repository->beginTransaction();
     try {
         $createdLanguage = $this->languageHandler->create($createStruct);
         $this->repository->commit();
     } catch (Exception $e) {
         $this->repository->rollback();
         throw $e;
     }
     return $this->buildDomainObject($createdLanguage);
 }
 /**
  * Test create function
  *
  * @covers eZ\Publish\Core\Persistence\InMemory\LanguageHandler::create
  */
 public function testCreate()
 {
     $struct = new CreateStruct();
     $struct->languageCode = 'nor-NB';
     $struct->name = 'Norwegian Bokmål';
     $struct->isEnabled = false;
     $language = $this->handler->create($struct);
     $this->assertInstanceOf('eZ\\Publish\\SPI\\Persistence\\Content\\Language', $language);
     $this->assertEquals(9, $language->id);
     $this->assertEquals('nor-NB', $language->languageCode);
     $this->assertEquals('Norwegian Bokmål', $language->name);
     $this->assertFalse($language->isEnabled);
 }