Config.php 3.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146
  1. <?php
  2. /**
  3. * Copyright © Magento, Inc. All rights reserved.
  4. * See COPYING.txt for license details.
  5. */
  6. namespace Magento\Framework\App\Language;
  7. use Magento\Framework\Config\Dom;
  8. /**
  9. * Language pack configuration file
  10. */
  11. class Config
  12. {
  13. /**
  14. * @var \Magento\Framework\Config\Dom\UrnResolver
  15. */
  16. protected $urnResolver;
  17. /**
  18. * @var \Magento\Framework\Config\DomFactory
  19. */
  20. protected $domFactory;
  21. /**
  22. * Data extracted from the configuration file
  23. *
  24. * @var array
  25. */
  26. protected $_data;
  27. /**
  28. * Constructor
  29. *
  30. * @param string $source
  31. * @param \Magento\Framework\Config\Dom\UrnResolver $urnResolver
  32. * @param \Magento\Framework\Config\DomFactory $domFactory
  33. * @throws \Magento\Framework\Exception\LocalizedException
  34. */
  35. public function __construct(
  36. $source,
  37. \Magento\Framework\Config\Dom\UrnResolver $urnResolver,
  38. \Magento\Framework\Config\DomFactory $domFactory
  39. ) {
  40. $this->urnResolver = $urnResolver;
  41. $this->domFactory = $domFactory;
  42. $dom = $this->domFactory->createDom(['xml' => $source, 'schemaFile' => $this->getSchemaFile()]);
  43. $this->_data = $this->_extractData($dom->getDom());
  44. }
  45. /**
  46. * Get absolute path to validation scheme for language.xml
  47. *
  48. * @return string
  49. */
  50. protected function getSchemaFile()
  51. {
  52. return $this->urnResolver->getRealPath('urn:magento:framework:App/Language/package.xsd');
  53. }
  54. /**
  55. * Extract configuration data from the DOM structure
  56. *
  57. * @param \DOMDocument $dom
  58. * @return array
  59. */
  60. protected function _extractData(\DOMDocument $dom)
  61. {
  62. /** @var $languageNode \DOMElement */
  63. $languageNode = $dom->getElementsByTagName('language')->item(0);
  64. /** @var $codeNode \DOMElement */
  65. $codeNode = $languageNode->getElementsByTagName('code')->item(0);
  66. /** @var $vendorNode \DOMElement */
  67. $vendorNode = $languageNode->getElementsByTagName('vendor')->item(0);
  68. /** @var $packageNode \DOMElement */
  69. $packageNode = $languageNode->getElementsByTagName('package')->item(0);
  70. /** @var $sortOrderNode \DOMElement */
  71. $sortOrderNode = $languageNode->getElementsByTagName('sort_order')->item(0);
  72. $use = [];
  73. /** @var $useNode \DOMElement */
  74. foreach ($languageNode->getElementsByTagName('use') as $useNode) {
  75. $use[] = [
  76. 'vendor' => $useNode->getAttribute('vendor'),
  77. 'package' => $useNode->getAttribute('package'),
  78. ];
  79. }
  80. return [
  81. 'code' => $codeNode->nodeValue,
  82. 'vendor' => $vendorNode->nodeValue,
  83. 'package' => $packageNode->nodeValue,
  84. 'sort_order' => $sortOrderNode ? $sortOrderNode->nodeValue : 0,
  85. 'use' => $use
  86. ];
  87. }
  88. /**
  89. * Language code
  90. *
  91. * @return string
  92. */
  93. public function getCode()
  94. {
  95. return $this->_data['code'];
  96. }
  97. /**
  98. * Language vendor
  99. *
  100. * @return string
  101. */
  102. public function getVendor()
  103. {
  104. return $this->_data['vendor'];
  105. }
  106. /**
  107. * Language package
  108. *
  109. * @return string
  110. */
  111. public function getPackage()
  112. {
  113. return $this->_data['package'];
  114. }
  115. /**
  116. * Sort order
  117. *
  118. * @return null|int
  119. */
  120. public function getSortOrder()
  121. {
  122. return $this->_data['sort_order'];
  123. }
  124. /**
  125. * Declaration of Inheritances
  126. *
  127. * @return string[][]
  128. */
  129. public function getUses()
  130. {
  131. return $this->_data['use'];
  132. }
  133. }