forked from Elara6331/itd
		
	Add Chinese transliteration via Pinyin conversion library
This commit is contained in:
		
							
								
								
									
										42
									
								
								translit/chinese.go
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										42
									
								
								translit/chinese.go
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,42 @@ | ||||
| package translit | ||||
|  | ||||
| import ( | ||||
| 	"bytes" | ||||
| 	"strings" | ||||
| 	"unicode" | ||||
|  | ||||
| 	"github.com/mozillazg/go-pinyin" | ||||
| ) | ||||
|  | ||||
| // ChineseTranslit implements Transliterator using a pinyin | ||||
| // conversion library. | ||||
| type ChineseTranslit struct{} | ||||
|  | ||||
| func (ct *ChineseTranslit) Transliterate(s string) string { | ||||
| 	// Create buffer for final output | ||||
| 	outBuf := &bytes.Buffer{} | ||||
| 	// Create buffer to temporarily store chinese characters | ||||
| 	tmpBuf := &bytes.Buffer{} | ||||
| 	// For every character in string | ||||
| 	for _, char := range s { | ||||
| 		// If character in Han range | ||||
| 		if unicode.Is(unicode.Han, char) { | ||||
| 			// Write character to temporary buffer | ||||
| 			tmpBuf.WriteRune(char) | ||||
| 		} else { | ||||
| 			// If buffer contains characters | ||||
| 			if tmpBuf.Len() > 0 { | ||||
| 				// Convert to pinyin (without tones) | ||||
| 				out := pinyin.LazyConvert(tmpBuf.String(), nil) | ||||
| 				// Write space-separated string to output | ||||
| 				outBuf.WriteString(strings.Join(out, " ")) | ||||
| 				// Reset temporary buffer | ||||
| 				tmpBuf.Reset() | ||||
| 			} | ||||
| 			// Write character to output | ||||
| 			outBuf.WriteRune(char) | ||||
| 		} | ||||
| 	} | ||||
| 	// Return output string | ||||
| 	return outBuf.String() | ||||
| } | ||||
| @@ -464,5 +464,6 @@ var Transliterators = map[string]Transliterator{ | ||||
| 		"😴", ":zzz:", | ||||
| 		"💤", ":zzz:", | ||||
| 	}, | ||||
| 	"Korean": &KoreanTranslit{}, | ||||
| 	"Korean":  &KoreanTranslit{}, | ||||
| 	"Chinese": &ChineseTranslit{}, | ||||
| } | ||||
|   | ||||
		Reference in New Issue
	
	Block a user