3 namespace Drupal\Core\TypedData\Plugin\DataType;
5 use Drupal\Core\TypedData\TypedData;
8 * Defines the 'language' data type.
10 * The plain value of a language is the language object, i.e. an instance of
11 * \Drupal\Core\Language\Language. For setting the value the language object or
12 * the language code as string may be passed.
16 * label = @Translation("Language"),
17 * description = @Translation("A language object.")
20 class Language extends TypedData {
23 * The id of the language.
30 * @var \Drupal\Core\Language
35 * Overrides TypedData::getValue().
37 * @return \Drupal\Core\Language\LanguageInterface|null
39 public function getValue() {
40 if (!isset($this->language) && $this->id) {
41 $this->language = \Drupal::languageManager()->getLanguage($this->id);
43 return $this->language;
47 * Overrides TypedData::setValue().
49 * Both the langcode and the language object may be passed as value.
51 public function setValue($value, $notify = TRUE) {
52 // Support passing language objects.
53 if (is_object($value)) {
54 $this->id = $value->getId();
55 $this->language = $value;
57 elseif (isset($value) && !is_scalar($value)) {
58 throw new \InvalidArgumentException('Value is no valid langcode or language object.');
62 $this->language = NULL;
64 // Notify the parent of any changes.
65 if ($notify && isset($this->parent)) {
66 $this->parent->onChange($this->name);
73 public function getString() {
74 $language = $this->getValue();
75 return $language ? $language->getName() : '';
81 public function id() {
82 if (isset($this->id)) {
85 elseif (isset($this->language)) {
86 return $this->language->getId();