code: public function getMessageSource($category)
      {
          if (isset($this->translations[$category])) {
              $source = $this->translations[$category];
              if ($source instanceof MessageSource) {
                  return $source;
              }
  
              return $this->translations[$category] = Yii::createObject($source);
          }
          // try wildcard matching
          foreach ($this->translations as $pattern => $source) {
              if (strpos($pattern, '*') > 0 && strpos($category, rtrim($pattern, '*')) === 0) {
                  if ($source instanceof MessageSource) {
                      return $source;
                  }
  
                  return $this->translations[$category] = $this->translations[$pattern] = Yii::createObject($source);
              }
          }
  
          // match '*' in the last
          if (isset($this->translations['*'])) {
              $source = $this->translations['*'];
              if ($source instanceof MessageSource) {
                  return $source;
              }
  
              return $this->translations[$category] = $this->translations['*'] = Yii::createObject($source);
          }
  
          throw new InvalidConfigException("Unable to locate message source for category '$category'.");
      }
docs: Returns the message source for the given category.
  @param string $category the category name.
  @return MessageSource the message source for the given category.
  @throws InvalidConfigException if there is no message source available for the specified category.