Case sensitivity in CMessageSource

Hello.

Trying to deal with app internationalization.

How can I get translated message in spite of case sensitivity?

For example, my message source (CPhpMessageSource):




<?php


return array(

  'username' => 'пользователь',

  'password' => 'пароль',

);



I need to get this:




Yii::t('main', 'username'); // must return 'пользователь'

Yii::t('main', 'Username'); // must return 'Пользователь'

Yii::t('main', 'USERNAME'); // must return 'ПОЛЬЗОВАТЕЛЬ'



I had to override CPhpMessageSource class to implement it. Are there any alternatives?




<?php


/**

 * Case-insensitive modification of default CPhpMessageSource class

 */

class PhpMessageSource extends CPhpMessageSource {


  private $_messages = array();


  protected function translateMessage($category, $message, $language) {


    $key = $language . '.' . $category;

    if (!isset($this->_messages[$key])) {

      $this->_messages[$key] = $this->loadMessages($category, $language);

    }

    $encoding = Yii::app()->charset;

    $lcMessage = mb_strtolower($message, $encoding);

    if (isset($this->_messages[$key][$lcMessage]) && $this->_messages[$key][$lcMessage] !== '') {

      $result = $this->_messages[$key][$lcMessage];

      if ($message == $lcMessage) {

        $result = mb_strtolower($result, $encoding);

      }

      else if ($message == mb_strtoupper($message, $encoding)) {

        $result = mb_strtoupper($result, $encoding);

      }

      else {

        $tmpMessage = $lcMessage;

        $tmpFirstLetter = mb_strtoupper(mb_substr($tmpMessage, 0, 1, $encoding), $encoding);

        $tmpMessage = $tmpFirstLetter.mb_substr($tmpMessage, 1, mb_strlen($tmpMessage, $encoding), $encoding);

        if ($message == $tmpMessage) {

          $result = mb_strtolower($result, $encoding);

          $resultFirstLetter = mb_strtoupper(mb_substr($result, 0, 1, $encoding), $encoding);

          $result = $resultFirstLetter.mb_substr($result, 1, mb_strlen($result, $encoding), $encoding);

        }

      }

      return $result;

    }

    else if ($this->hasEventHandler('onMissingTranslation')) {

      $event = new CMissingTranslationEvent($this, $category, $message, $language);

      $this->onMissingTranslation($event);

      return $event->message;

    }

    else {

      return $message;

    }


  }


}