forked from Elara6331/itd
		
	Add Chinese transliteration via Pinyin conversion library
This commit is contained in:
		@@ -58,6 +58,7 @@ Since the PineTime does not have enough space to store all unicode glyphs, it on
 | 
				
			|||||||
- French
 | 
					- French
 | 
				
			||||||
- Armenian
 | 
					- Armenian
 | 
				
			||||||
- Korean
 | 
					- Korean
 | 
				
			||||||
 | 
					- Chinese
 | 
				
			||||||
- Emoji
 | 
					- Emoji
 | 
				
			||||||
 | 
					
 | 
				
			||||||
Place the desired map names in an array as `notifs.translit.use`. They will be evaluated in order. You can also put custom transliterations in `notifs.translit.custom`. These take priority over any other maps. The `notifs.translit` config section should look like this:
 | 
					Place the desired map names in an array as `notifs.translit.use`. They will be evaluated in order. You can also put custom transliterations in `notifs.translit.custom`. These take priority over any other maps. The `notifs.translit` config section should look like this:
 | 
				
			||||||
 
 | 
				
			|||||||
							
								
								
									
										1
									
								
								go.mod
									
									
									
									
									
								
							
							
						
						
									
										1
									
								
								go.mod
									
									
									
									
									
								
							@@ -15,6 +15,7 @@ require (
 | 
				
			|||||||
	github.com/mattn/go-isatty v0.0.13 // indirect
 | 
						github.com/mattn/go-isatty v0.0.13 // indirect
 | 
				
			||||||
	github.com/mattn/go-runewidth v0.0.13 // indirect
 | 
						github.com/mattn/go-runewidth v0.0.13 // indirect
 | 
				
			||||||
	github.com/mitchellh/mapstructure v1.4.1
 | 
						github.com/mitchellh/mapstructure v1.4.1
 | 
				
			||||||
 | 
						github.com/mozillazg/go-pinyin v0.18.0
 | 
				
			||||||
	github.com/rs/zerolog v1.23.0
 | 
						github.com/rs/zerolog v1.23.0
 | 
				
			||||||
	github.com/sirupsen/logrus v1.8.1 // indirect
 | 
						github.com/sirupsen/logrus v1.8.1 // indirect
 | 
				
			||||||
	github.com/spf13/cast v1.4.1 // indirect
 | 
						github.com/spf13/cast v1.4.1 // indirect
 | 
				
			||||||
 
 | 
				
			|||||||
							
								
								
									
										2
									
								
								go.sum
									
									
									
									
									
								
							
							
						
						
									
										2
									
								
								go.sum
									
									
									
									
									
								
							@@ -242,6 +242,8 @@ github.com/mitchellh/mapstructure v1.4.1/go.mod h1:bFUtVrKA4DC2yAKiSyO/QUcy7e+RR
 | 
				
			|||||||
github.com/modern-go/concurrent v0.0.0-20180228061459-e0a39a4cb421/go.mod h1:6dJC0mAP4ikYIbvyc7fijjWJddQyLn8Ig3JB5CqoB9Q=
 | 
					github.com/modern-go/concurrent v0.0.0-20180228061459-e0a39a4cb421/go.mod h1:6dJC0mAP4ikYIbvyc7fijjWJddQyLn8Ig3JB5CqoB9Q=
 | 
				
			||||||
github.com/modern-go/reflect2 v0.0.0-20180701023420-4b7aa43c6742/go.mod h1:bx2lNnkwVCuqBIxFjflWJWanXIb3RllmbCylyMrvgv0=
 | 
					github.com/modern-go/reflect2 v0.0.0-20180701023420-4b7aa43c6742/go.mod h1:bx2lNnkwVCuqBIxFjflWJWanXIb3RllmbCylyMrvgv0=
 | 
				
			||||||
github.com/modern-go/reflect2 v1.0.1/go.mod h1:bx2lNnkwVCuqBIxFjflWJWanXIb3RllmbCylyMrvgv0=
 | 
					github.com/modern-go/reflect2 v1.0.1/go.mod h1:bx2lNnkwVCuqBIxFjflWJWanXIb3RllmbCylyMrvgv0=
 | 
				
			||||||
 | 
					github.com/mozillazg/go-pinyin v0.18.0 h1:hQompXO23/0ohH8YNjvfsAITnCQImCiR/Fny8EhIeW0=
 | 
				
			||||||
 | 
					github.com/mozillazg/go-pinyin v0.18.0/go.mod h1:iR4EnMMRXkfpFVV5FMi4FNB6wGq9NV6uDWbUuPhP4Yc=
 | 
				
			||||||
github.com/muka/go-bluetooth v0.0.0-20210812063148-b6c83362e27d h1:EG/xyWjHT19rkUpwsWSkyiCCmyqNwFovr9m10rhyOxU=
 | 
					github.com/muka/go-bluetooth v0.0.0-20210812063148-b6c83362e27d h1:EG/xyWjHT19rkUpwsWSkyiCCmyqNwFovr9m10rhyOxU=
 | 
				
			||||||
github.com/muka/go-bluetooth v0.0.0-20210812063148-b6c83362e27d/go.mod h1:dMCjicU6vRBk34dqOmIZm0aod6gUwZXOXzBROqGous0=
 | 
					github.com/muka/go-bluetooth v0.0.0-20210812063148-b6c83362e27d/go.mod h1:dMCjicU6vRBk34dqOmIZm0aod6gUwZXOXzBROqGous0=
 | 
				
			||||||
github.com/nfnt/resize v0.0.0-20180221191011-83c6a9932646/go.mod h1:jpp1/29i3P1S/RLdc7JQKbRpFeM1dOBd8T9ki5s+AY8=
 | 
					github.com/nfnt/resize v0.0.0-20180221191011-83c6a9932646/go.mod h1:jpp1/29i3P1S/RLdc7JQKbRpFeM1dOBd8T9ki5s+AY8=
 | 
				
			||||||
 
 | 
				
			|||||||
							
								
								
									
										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:",
 | 
				
			||||||
		"💤", ":zzz:",
 | 
							"💤", ":zzz:",
 | 
				
			||||||
	},
 | 
						},
 | 
				
			||||||
	"Korean": &KoreanTranslit{},
 | 
						"Korean":  &KoreanTranslit{},
 | 
				
			||||||
 | 
						"Chinese": &ChineseTranslit{},
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 
 | 
				
			|||||||
		Reference in New Issue
	
	Block a user