code: private static function tokenizePattern($pattern)
      {
          $charset = Yii::$app ? Yii::$app->charset : 'UTF-8';
          $depth = 1;
          if (($start = $pos = mb_strpos($pattern, '{', 0, $charset)) === false) {
              return [$pattern];
          }
          $tokens = [mb_substr($pattern, 0, $pos, $charset)];
          while (true) {
              $open = mb_strpos($pattern, '{', $pos + 1, $charset);
              $close = mb_strpos($pattern, '}', $pos + 1, $charset);
              if ($open === false && $close === false) {
                  break;
              }
              if ($open === false) {
                  $open = mb_strlen($pattern, $charset);
              }
              if ($close > $open) {
                  $depth++;
                  $pos = $open;
              } else {
                  $depth--;
                  $pos = $close;
              }
              if ($depth === 0) {
                  $tokens[] = explode(',', mb_substr($pattern, $start + 1, $pos - $start - 1, $charset), 3);
                  $start = $pos + 1;
                  $tokens[] = mb_substr($pattern, $start, $open - $start, $charset);
                  $start = $open;
              }
  
              if ($depth !== 0 && ($open === false || $close === false)) {
                  break;
              }
          }
          if ($depth !== 0) {
              return false;
          }
  
          return $tokens;
      }
docs: Tokenizes a pattern by separating normal text from replaceable patterns.
  @param string $pattern patter to tokenize
  @return array|bool array of tokens or false on failure