Fixes for r84057 LanguageTr uc/lc:
authorTim Starling <tstarling@users.mediawiki.org>
Thu, 6 Oct 2011 02:31:38 +0000 (02:31 +0000)
committerTim Starling <tstarling@users.mediawiki.org>
Thu, 6 Oct 2011 02:31:38 +0000 (02:31 +0000)
* Fixed inappropriate use of empty(), see style guide
* Made uc() and lc() respect the $first parameter. Not doing this completely broke the Turkish wikipedia, sending links like [[İngilizce]] to [[İngİlİzce]].
* Use str_replace() instead of preg_replace(). It's not necessary to use a unicode-aware replacement algorithm to do UTF-8 string replacements, due to details of the UTF-8 encoding format. I'm not sure how Hashar concluded that strtr() will produce garbage.

languages/classes/LanguageTr.php

index 5692c02..0a2673c 100644 (file)
@@ -17,7 +17,7 @@ class LanguageTr extends Language {
         * @return string
         */
        function ucfirst ( $string ) {
-               if ( !empty( $string ) && $string[0] == 'i' ) {
+               if ( strlen( $string ) && $string[0] == 'i' ) {
                        return 'İ' . substr( $string, 1 );
                } else {
                        return parent::ucfirst( $string );
@@ -29,7 +29,7 @@ class LanguageTr extends Language {
         * @return mixed|string
         */
        function lcfirst ( $string ) {
-               if ( !empty( $string ) && $string[0] == 'I' ) {
+               if ( strlen( $string ) && $string[0] == 'I' ) {
                        return 'ı' . substr( $string, 1 );
                } else {
                        return parent::lcfirst( $string );
@@ -45,7 +45,15 @@ class LanguageTr extends Language {
         * @return string
         */
        function uc( $string, $first = false ) {
-               $string = preg_replace( '/i/', 'İ', $string );
+               if ( strlen( $string ) ) {
+                       if ( $first ) {
+                               if ( $string[0] === 'i' ) {
+                                       $string = 'İ' . substr( $string, 1 );
+                               }
+                       } else {
+                               $string = str_replace( 'i', 'İ', $string );
+                       }
+               }
                return parent::uc( $string, $first );
        }
 
@@ -58,7 +66,15 @@ class LanguageTr extends Language {
         * @return string
         */
        function lc( $string, $first = false ) {
-               $string = preg_replace( '/I/', 'ı', $string );
+               if ( strlen( $string ) ) {
+                       if ( $first ) {
+                               if ( $string[0] == 'I' ) {
+                                       $string = 'ı' . substr( $string, 1 );
+                               }
+                       } else {
+                               $string = str_replace( 'I', 'ı', $string );
+                       }
+               }
                return parent::lc( $string, $first );
        }