LanguagesCacheContext.php 2.1 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980
  1. <?php
  2. namespace Drupal\Core\Cache\Context;
  3. use Drupal\Core\Cache\CacheableMetadata;
  4. use Drupal\Core\Language\LanguageManagerInterface;
  5. /**
  6. * Defines the LanguagesCacheContext service, for "per language" caching.
  7. */
  8. class LanguagesCacheContext implements CalculatedCacheContextInterface {
  9. /**
  10. * The language manager.
  11. *
  12. * @var \Drupal\Core\Language\LanguageManagerInterface
  13. */
  14. protected $languageManager;
  15. /**
  16. * Constructs a new LanguagesCacheContext service.
  17. *
  18. * @param \Drupal\Core\Language\LanguageManagerInterface $language_manager
  19. * The language manager.
  20. */
  21. public function __construct(LanguageManagerInterface $language_manager) {
  22. $this->languageManager = $language_manager;
  23. }
  24. /**
  25. * {@inheritdoc}
  26. */
  27. public static function getLabel() {
  28. return t('Language');
  29. }
  30. /**
  31. * {@inheritdoc}
  32. *
  33. * $type can be NULL, or one of the language types supported by the language
  34. * manager, typically:
  35. * - LanguageInterface::TYPE_INTERFACE
  36. * - LanguageInterface::TYPE_CONTENT
  37. * - LanguageInterface::TYPE_URL
  38. *
  39. * @see \Drupal\Core\Language\LanguageManagerInterface::getLanguageTypes()
  40. *
  41. * @throws \RuntimeException
  42. * In case an invalid language type is specified.
  43. */
  44. public function getContext($type = NULL) {
  45. if ($type === NULL) {
  46. $context_parts = [];
  47. if ($this->languageManager->isMultilingual()) {
  48. foreach ($this->languageManager->getLanguageTypes() as $type) {
  49. $context_parts[] = $this->languageManager->getCurrentLanguage($type)->getId();
  50. }
  51. }
  52. else {
  53. $context_parts[] = $this->languageManager->getCurrentLanguage()->getId();
  54. }
  55. return implode(',', $context_parts);
  56. }
  57. else {
  58. $language_types = $this->languageManager->getDefinedLanguageTypesInfo();
  59. if (!isset($language_types[$type])) {
  60. throw new \RuntimeException(sprintf('The language type "%s" is invalid.', $type));
  61. }
  62. return $this->languageManager->getCurrentLanguage($type)->getId();
  63. }
  64. }
  65. /**
  66. * {@inheritdoc}
  67. */
  68. public function getCacheableMetadata($type = NULL) {
  69. return new CacheableMetadata();
  70. }
  71. }