InitialTranslationSource.php 2.3 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182
  1. <?php
  2. /**
  3. * Copyright © Magento, Inc. All rights reserved.
  4. * See COPYING.txt for license details.
  5. */
  6. namespace Magento\Translation\Model\Source;
  7. use Magento\Framework\App\DeploymentConfig;
  8. use Magento\Store\Model\StoreManager;
  9. use Magento\Translation\Model\ResourceModel\TranslateFactory;
  10. use Magento\Translation\Model\ResourceModel\Translate;
  11. use Magento\Framework\App\Config\ConfigSourceInterface;
  12. use Magento\Framework\DataObject;
  13. /**
  14. * Class for reading translations from DB
  15. */
  16. class InitialTranslationSource implements ConfigSourceInterface
  17. {
  18. /**
  19. * @var TranslateFactory
  20. */
  21. private $translateFactory;
  22. /**
  23. * @var StoreManager
  24. */
  25. private $storeManager;
  26. /**
  27. * @var array
  28. */
  29. private $data;
  30. /**
  31. * @var DeploymentConfig
  32. */
  33. private $deploymentConfig;
  34. /**
  35. * @param TranslateFactory $translateFactory
  36. * @param StoreManager $storeManager
  37. * @param DeploymentConfig $deploymentConfig
  38. */
  39. public function __construct(
  40. TranslateFactory $translateFactory,
  41. StoreManager $storeManager,
  42. DeploymentConfig $deploymentConfig
  43. ) {
  44. $this->translateFactory = $translateFactory;
  45. $this->storeManager = $storeManager;
  46. $this->deploymentConfig = $deploymentConfig;
  47. }
  48. /**
  49. * Read translations for the given 'path' from application initial configuration.
  50. *
  51. * @param string $path
  52. * @return mixed
  53. */
  54. public function get($path = '')
  55. {
  56. if (!$this->deploymentConfig->isDbAvailable()) {
  57. return [];
  58. }
  59. if (!$this->data) {
  60. /** @var Translate $translate */
  61. $translate = $this->translateFactory->create();
  62. $select = $translate->getConnection()->select()
  63. ->from($translate->getMainTable(), ['string', 'translate', 'store_id', 'locale'])
  64. ->order('store_id');
  65. $translations = [];
  66. foreach ($translate->getConnection()->fetchAll($select) as $item) {
  67. $store = $this->storeManager->getStore($item['store_id']);
  68. $translations[$item['locale']][$store->getCode()][$item['string']] = $item['translate'];
  69. }
  70. $this->data = new DataObject($translations);
  71. }
  72. return $this->data->getData($path) ?: [];
  73. }
  74. }