[Home]WikiSuggestions/DoIndexForChinesePageName

UseModWiki | WikiSuggestions | RecentChanges | Preferences

Although UseMod support non-English content and interfaces, for the moment it seems that it can not create page index for non-English named pages. However, for Chinese character, we can use Pinyin as index. Here is a patch for this purpose.

First, you should make sure that your website are using config with $NonEnglish=1. Also, you'd better use 'UTF-8' encoding method for your pages.

Secondly, make sure you server has Encode module of Perl installed, then you just need to modify your code as following.


Change

sub GetPageDirectory {
  my ($id) = @_;

  if ($id =~ /^([a-zA-Z])/) {
    return uc($1);
  }
  return "other";
}
To be
sub GetPageDirectory {
  my ($id) = @_;

  if ($id =~ /^([a-zA-Z])/) {
    return uc($1);
  }
  return PinyinIndex($id);
}

sub PinyinIndex()
{ #created by Xuefeng Liu.
  my ($id)=@_;

  use Encode qw/encode decode from_to/; 
  my $data = encode("gb2312", decode("utf8", $id));
  $data=~s/\|//g;
  $data=~ s/(\W)/sprintf("%02X", unpack("C", $1))/eg;
  $data=~ /^(.{4})/;
  my $chr_value= hex($1);

  if( $chr_value < hex("B0A1") ) { return "other"; }
  if( $chr_value <= hex("B0C4")) { return "A"; }
  if( $chr_value <= hex("B2C0")) { return "B"; }
  if( $chr_value <= hex("B4ED")) { return "C"; }
  if( $chr_value <= hex("B6E9")) { return "D"; }
  if( $chr_value <= hex("B7A1")) { return "E"; }
  if( $chr_value <= hex("B8C0")) { return "F"; }
  if( $chr_value <= hex("B9FD")) { return "G"; }
  if( $chr_value <= hex("BBF6")) { return "H"; }
  if( $chr_value <= hex("BFA5")) { return "J"; }
  if( $chr_value <= hex("C0AB")) { return "K"; }
  if( $chr_value <= hex("C2E7")) { return "L"; }
  if( $chr_value <= hex("C4C2")) { return "M"; }
  if( $chr_value <= hex("C5B5")) { return "N"; }
  if( $chr_value <= hex("C5BD")) { return "O"; }
  if( $chr_value <= hex("C6D9")) { return "P"; }
  if( $chr_value <= hex("C8BA")) { return "Q"; }
  if( $chr_value <= hex("C8F5")) { return "R"; }
  if( $chr_value <= hex("CBF9")) { return "S"; }
  if( $chr_value <= hex("CDD9")) { return "T"; }
  if( $chr_value <= hex("CEF3")) { return "W"; }
  if( $chr_value <= hex("D188")) { return "X"; }
  if( $chr_value <= hex("D4D0")) { return "Y"; }
  if( $chr_value <= hex("D7F9")) { return "Z"; } 
  return "other";
}

If you have problem, please feel free to contact with me, xfliu.math[at]gmail.com


UseModWiki | WikiSuggestions | RecentChanges | Preferences
Edit text of this page | View other revisions | Search MetaWiki
Last edited December 2, 2006 9:03 am by Xuefeng LIU (diff)
Search: