mojinizer - công cụ hỗ trợ kiếm tra tiếng nhật cho RoR developer

Đôi khi các developer sẽ gặp khó khăn khi khách hàng người Nhật yêu cầu bạn phải validate các trường tiếng Nhật, hoặc là cần convert giữa các kiểu chữ cái khác nhau, mà cái khó là developer chẳng biết quy luật gì của tận 4 bảng chữ cái của Nhật, chẳng biết phải chuyển đổi chúng như thế nào.

Để giải quyết nỗi đau đầu không hề nhẹ đó của developer, trong bài viết này tôi xin giới thiệu đến các bạn công cụ Mojinizer giúp các developer có thể dễ dàng check điều kiện validate của các loại chữ cái cũng như các kiểu chữ trong tiếng Nhật, cũng như chuyển đổi các loại chữ cái (hiragana, katakana, roomaji, và ngoại trừ Kanji).

  1. Tổng quan

Monjnier có thể:

  • Phát hiện và chuyển đổi giữa các class String lẫn nhau giữa các chuỗi kana (hira và kata) trong tiếng Nhật.
  • Phát hiện và chuyển đổi từ dạng kana sang romaji và ngược lại

Không thể;

  • chuyển đổi kí tự Kanji (vì Kanji trong tiếng Nhật rất phức tạp và có nhiều cách đọc nên không thể chuyển từ Kanji sang hiragana hay romaji và ngược lại).
  1. Cài đặt Monjinier
  • gem "mojinizer"

  • Chạy lệnh bundle

  • Hoặc có thể dùng lệnh với gem: gem install mojinizer

  1. Sử dụng

    3.1. Các methods chuyển đổi các dạng kí tự

    Các String japanese sẽ được thêm vào các methods phát hiện và chuyển đổi và String class. Sau đó có thể gọi các methods mới được thêm vào của monjnier này theo cách đã được gem này định nghĩa:

  • Hiragana/katakana --> romaji conversion (平仮名/片仮名 --> ロ-マ字 変換)
"つくえ".romaji #=> "tsukue"
"ツクエ".romaji #=> "tsukue"
  • Katakana/romaji --> hiragana conversion (片仮名/ロ-マ字 --> 平仮名 変換)
"ツクエ".hiragana #=> "つくえ"
"tsukue".hiragana #=> "つくえ"
  • Hiragana/romaji --> katakana conversion (平仮名/ロ-マ字 --> 片仮名 変換)
"つくえ".katakana #=> "ツクエ"
"tsukue".katakana #=> "ツクエ"

-Hiragana --> katakana conversion (平仮名 --> 片仮名 変換)

-Katakana --> hiragana conversion (片仮名 --> 平仮名 変換)

"つくえ".hira_to_kata #=> "ツクエ"
"ツクエ".kata_to_hira #=> "つくえ"
  • Hankaku --> zenkaku conversion (半角 --> 全角 文字種変換) (kiểu half-width sang full-width)

  • Zenkaku --> hankaku conversion (全角 --> 半角 文字種変換) (full-width sang half-width)

  • Zenkaku <--> hankaku normalization (全角 <--> 半角 文字規準化) (hafl-width sang kiểu thường: full-width nếu là kí tự japanese, bình thường của kí tự latin)

"アロハ".han_to_zen #=> "アロハ"
"Aloha!".han_to_zen #=> "Aloha!"
"アロハ".zen_to_han #=> "アロハ"
"Aloha!".zen_to_han #=> "Aloha!"
"アロハ!".normalize_zen_han #=> "アロハ!"
"「Aloha」".normalize_zen_han #=> "「Aloha」"

Một số phép chuyển đổi khác:

"tsukue".katakana.zen_to_han #=> "ツクエ"
"ツクエ".han_to_zen.hiragana #=> "つくえ"
"ツクエ".han_to_zen.romaji #=> "tsukue"
"ツクエ".han_to_zen.romaji.upcase #=> "TSUKUE"
"ツクエ".han_to_zen.romaji.upcase.han_to_zen #=> "TSUKUE"

3.2. Các methods phát hiện kí tự

  • Phát hiện chuỗi kí tự là chuỗi kana (bao gồm hiragana/katakana)
"アロハ".kana? #=> true
"すし".kana? #=> true
"Aloha".kana? #=> false
"Let's eat すし".kana? #=> false
  • Phát hiện chuỗi là có là hiragana (hoặc katakana) hay không
"アロハ".katakana? #=> true
"すし".katakana? #=> false
"アロハ everybody".katakana? #=> false
"アロハ".hiragana? #=> false
"すし".hiragana? #=> true
"Let's eat すし".hiragana? #=> false
  • Phát hiện chuỗi có là Kanji hay không
"金曜日".kanji? #=> true
"金曜日だよ".kanji? #=> false
"It's Friday, 金曜日".kanji? #=> false
  • Phát hiện chuỗi là dạng full-width (zenkaku) hoặc half-width(hankaku) hay là chữ latin full-width (ASCII zenkaku) hay không
"アロハ".hankaku? #=> true
"アロハ".hankaku? #=> false
"アロハ".zenkaku? #=> false
"アロハ everybody".zenkaku? #=> true
"アロハ everybody".ascii_zenkaku? #=> false
"Aloha".ascii_zenkaku? #=> true
  • Khi yêu cầu check xem có phải đoạn text là chuỗi japanese hay không
"アロハ".japanese? #=> true
"Let's eat すし".japanese? #=> false

3.3. Phát hiện chuỗi có chứa kí tự thuộc dạng nào đó hay không

  • Chuỗi có chứa kí tự kana hay không
"Let's eat すし".contains_kana? #=> true
  • Có chứa kí tự hiragana hoặc katakana hay không
"アロハ everybody".contains_katakana? #=> true
"Let's eat すし".contains_katakana? #=> false
"アロハ everybody".contains_hiragana? #=> false
"Let's eat すし".contains_hiragana? #=> true
  • Có chứa kí tự kanji hay không
"金曜日だよ".contains_kanji? #=> true
"It's Friday, Friday".contains_kanji? #=> false
  • Có chứa kí tự dạng full-width, half-width, hoặc kí tự latin full-width hay không
"アロハ everybody".contains_hankaku? #=> true
"Let's eat すし".contains_hankaku? #=> false
"アロハ everybody".contains_zenkaku? #=> false
"Let's eat すし".contains_zenkaku? #=> true
"アロハ everybody".contains_ascii_zenkaku? #=> false
"Let's eat sushi".contains_ascii_zenkaku? #=> true
  • Có chứa kí tự japanese hay không (có chứa một trong các kí tự là kana hay kanji)
"Let's eat すし".contains_japanese? #=> true
"It's Friday, Friday".contains_japanese? #=> false

Ngoài ra, các bạn có thể vận dụng kết hợp linh hoạt giữa các method có sẵn để phục vụ cho việc giải quyết bài toán của mình.

Hi vọng bài viết có thể giúp ích cho bạn!

Link tham khảo

Github