Top > OOoBasic > Generic > Transliteration

文字変換 Edit

大文字を小文字に、ひらがなをカタカナに、またはその逆に変換できるサービス。変換の仕方は言語に依存。日本語だと平仮名と片仮名変換がメインでしょうか。

Transliteration Edit

文字の変換には com.sun.star.i18n.Transliteration サービスを利用します。

 oTransliteration = CreateUnoService("com.sun.star.i18n.Transliteration")

サービスをインスタンス化するだけでは変換はできません。変換に利用するモジュールと言語の設定が必要です。変換内容によって読み込むモジュールを変更する必要があるので各変換項目を参照。

平仮名 - カタカナ変換 Edit

平仮名をカタカナに、カタカナを平仮名にするときには com.sun.star.i18n.TransliterationModuleNew の HIRAGANA_KATAKANA もしくは KATAKANA_HIRAGANA を読み込みます。ロケール設定は日本語にします。

Sub transliteration_1
  oLocale = CreateUnoStruct("com.sun.star.lang.Locale")
  oLocale.Language = "ja"
  oLocale.Country = "JP"
  
  oTransliteration = CreateUnoService("com.sun.star.i18n.Transliteration")
  oTransliteration.loadModuleNew(_
    Array(com.sun.star.i18n.TransliterationModulesNew.HIRAGANA_KATAKANA),oLocale)
  
  Dim nOffset() As Long
  sHira = "ひらがな"
  sKata = oTransliteration.transliterate(sHira,0,Len(sHira),nOffset)
  msgbox sKata
  
  oTransliteration.loadModuleNew(_
    Array(com.sun.star.i18n.TransliterationModulesNew.KATAKANA_HIRAGANA),oLocale)
  sKata = "カナ"
  sHira = oTransliteration.transliterate(sKata,0,Len(sHira),nOffset)
  msgbox sHira
End Sub

loadModuleNew メソッドでモジュールを読み込みます。変換には transliterate を利用します。変換する文字列、変換開始位置、変換回数、位置 ([out]) を指定、返り値が変換後文字列になります。

大文字 - 小文字変換 Edit

アルファベットの大文字と小文字を変換。モジュールに UPPERCASE_LOWERCASE もしくは LOWERCASE_UPPERCASE を利用します。

Sub transliteration_2
  oLocale = CreateUnoStruct("com.sun.star.lang.Locale")
  oLocale.Language = "ja"
  oLocale.Country = "JP"
  
  oTransliteration = CreateUnoService("com.sun.star.i18n.Transliteration")
  oTransliteration.loadModuleNew(_
    Array(com.sun.star.i18n.TransliterationModulesNew.UPPERCASE_LOWERCASE),oLocale)
  
  Dim nOffset() As Long
  sHira = "Hira"
  sKata = oTransliteration.transliterate(sHira,0,Len(sHira),nOffset)
  msgbox sKata
  
  oTransliteration.loadModuleNew(_
    Array(com.sun.star.i18n.TransliterationModulesNew.LOWERCASE_UPPERCASE),oLocale)
  sKata = "Kata"
  sHira = oTransliteration.transliterate(sKata,0,Len(sHira),nOffset)
  msgbox sHira
End Sub

全角 - 半角変換 Edit

Sub transliteration_3
 Dim nOffset() As Long
 aLocale = CreateUnoStruct("com.sun.star.lang.Locale")
 aLocale.Language = "ja"
 aLocale.Country = "JP"
 
 ' 全角 -> 半角
 oFull2Half = CreateUnoService("com.sun.star.i18n.Transliteration")
 oFull2Half.loadModuleNew(_
   Array(com.sun.star.i18n.TransliterationModulesNew.FULLWIDTH_HALFWIDTH), aLocale)
 
 sFull = "123a"
 sHalf = oFull2Half.transliterate(sFull, 0, Len(sFull), nOffset)
 msgbox sHalf
 
 
 ' 半角 -> 全角
 oHalf2Full = CreateUnoService("com.sun.star.i18n.Transliteration")
 oHalf2Full.loadModuleNew(_
   Array(com.sun.star.i18n.TransliterationModulesNew.HALFWIDTH_FULLWIDTH), aLocale)
 sHalf = "123a"
 sFull = oHalf2Full.transliterate(sFull, 0, Len(sHalf), nOffset)
 msgbox sFull
End Sub

NumToCharFullwidth を指定すると数字のみを半角から全角に変換できます。

漢字 - 数値変換 Edit

Sub transliteration_4
 aLocale = CreateUnoStruct("com.sun.star.lang.Locale")
 aLocale.Language = "ja"
 aLocale.Country = "JP"
 
 oText2Num = CreateUnoService("com.sun.star.i18n.Transliteration")
 oText2Num.loadModuleNew(_
   Array(com.sun.star.i18n.TransliterationModulesNew.TextToNumLower_zh_CN),aLocale)
 
 Dim nOffset() As Long
 sKanji = "千二百五十一"
 sNum = oText2Num.transliterate(sKanji,0,Len(sKanji),nOffset)
 msgbox sNum
 
 
 oNum2Text = CreateUnoService("com.sun.star.i18n.Transliteration")
 oNum2Text.loadModuleNew(_
   Array(com.sun.star.i18n.TransliterationModulesNew.NumToCharKanjiShort_ja_JP),aLocale)
 sNum = "123"
 sKanji = oNum2Text.transliterate(sNum,0,Len(sNum),nOffset)
 msgbox sKanji
End Sub

NumToCharKanjiShort_ja_JP を指定すると 123 -> 123 となります。NumToTextLower_zh_CN を指定すると 123456 -> 十二万三千四百五十六 となります。


Reload   New Lower page making Edit Freeze Diff Upload Copy Rename   Front page List of pages Search Recent changes Backup   Help   RSS of recent changes