ShuntRequestController.php 1.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960
  1. <?php
  2. namespace Tools\Controller;
  3. use App\Controller\AppController;
  4. use Cake\Core\Configure;
  5. use Cake\I18n\I18n;
  6. use RuntimeException;
  7. /**
  8. * Language switching
  9. *
  10. * Needs Configure:
  11. * - allowedLanguages (language mapping)
  12. * - defaultLanguage (optional, uses first of allowedLanguages otherwise)
  13. *
  14. * Mapping
  15. *
  16. * de => ['locale' => 'de_DE', 'name' => 'Deutsch'], ...
  17. *
  18. * @property \Cake\Controller\Component\FlashComponent $Flash
  19. */
  20. class ShuntRequestController extends AppController {
  21. /**
  22. * @var string|false
  23. */
  24. public $modelClass = false;
  25. /**
  26. * Switch language as post link.
  27. *
  28. * @param string|null $language
  29. * @return \Cake\Http\Response
  30. * @throws \RuntimeException
  31. */
  32. public function language($language = null) {
  33. $this->getRequest()->allowMethod(['post']);
  34. $allowedLanguages = (array)Configure::read('Config.allowedLanguages');
  35. if (!$language) {
  36. $language = Configure::read('Config.defaultLanguage');
  37. }
  38. if (!$language) {
  39. $keys = array_keys($allowedLanguages);
  40. $language = $allowedLanguages[array_shift($keys)];
  41. }
  42. if (!array_key_exists($language, $allowedLanguages)) {
  43. throw new RuntimeException('Invalid Language');
  44. }
  45. $language = $allowedLanguages[$language];
  46. $this->getRequest()->getSession()->write('Config.language', $language['locale']);
  47. I18n::setLocale($language['locale']);
  48. $this->Flash->success(__d('tools', 'Language switched to {0}', $language['name']));
  49. return $this->redirect($this->referer('/', true));
  50. }
  51. }