fix: test
This commit is contained in:
@@ -2,9 +2,18 @@
|
||||
|
||||
[](https://godoc.org/github.com/andoma-go/translit)
|
||||
|
||||
Хоть кода в этой библиотеке и не очень много, но время на нее все-таки было потрачено, т.к. раньше я просто не задумывался о некоторых аспектах работы с транслитерацией.
|
||||
Данная библиотека обеспечивает простую транслитерацию. Для этого достаточно только описать
|
||||
соответствующую таблицу подстановки символов, в которой буква проассоциирована с какой-либо
|
||||
строкой. В частности, такая ассоциация для транслитерации русского языка уже определена.
|
||||
|
||||
В общем, как и большинство других аналогичных библиотек, она перебирает все символы в строке и заменяет их по предложенному ей словарю. Отличие только в том, что, с моей точки зрения, она более корректно отрабатывает случаи с чередованием заглавных букв. Например:
|
||||
Текущая реализация подразумевает только одностороннюю транслитерацию: обратное преобразование
|
||||
будет уже не так очевидно.
|
||||
|
||||
Хоть кода в этой библиотеке и не очень много, но время на нее все-таки было потрачено, т.к. раньше я ([mdigger](https://github.com/mdigger)) просто не задумывался о некоторых аспектах работы с транслитерацией.
|
||||
|
||||
В общем, как и большинство других аналогичных библиотек, она перебирает все символы в строке и заменяет их по предложенному ей словарю. Отличие только в том, что, с моей точки зрения ([mdigger](https://github.com/mdigger)), она более корректно отрабатывает случаи с чередованием заглавных букв.
|
||||
|
||||
Например:
|
||||
|
||||
"ЧАЩА" -> "CHASCHA"
|
||||
"ЧаЩа" -> "ChaScha"
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
module github.com/andoma-go/translit
|
||||
|
||||
go 1.20
|
||||
go 1.21.5
|
||||
|
||||
require golang.org/x/text v0.9.0
|
||||
require golang.org/x/text v0.14.0
|
||||
|
||||
@@ -1,2 +1,2 @@
|
||||
golang.org/x/text v0.9.0 h1:2sjJmO8cDvYveuX97RDLsxlyUxLl+GHoLxBiRdHllBE=
|
||||
golang.org/x/text v0.9.0/go.mod h1:e1OnstbJyHTd6l/uOt8jFFHp6TRDWZR/bV3emEE/zU8=
|
||||
golang.org/x/text v0.14.0 h1:ScX5w1eTa3QqT8oi6+ziP7dTV1S2+ALU0bI+0zXKWiQ=
|
||||
golang.org/x/text v0.14.0/go.mod h1:18ZOQIKpY8NJVqYksKHtTdi31H5itFRjB5/qKTNYzSU=
|
||||
|
||||
+1
-41
@@ -1,37 +1,3 @@
|
||||
// Данная библиотека обеспечивает простую транслитерацию. Для этого достаточно только описать
|
||||
// соответствующую таблицу подстановки символов, в которой буква проассоциирована с какой-либо
|
||||
// строкой. В частности, такая ассоциация для транслитерации русского языка уже определена.
|
||||
//
|
||||
// Текущая реализация подразумевает только одностороннюю транслитерацию: обратное преобразование
|
||||
// будет уже не так очевидно.
|
||||
//
|
||||
// Хоть кода в этой библиотеке и не очень много, но время на нее все-таки было потрачено, т.к.
|
||||
// раньше я просто не задумывался о некоторых аспектах работы с транслитерацией.
|
||||
//
|
||||
// В общем, как и большинство других аналогичных библиотек, она перебирает все символы в строке
|
||||
// и заменяет их по предложенному ей словарю. Отличие только в том, что, с моей точки зрения, она
|
||||
// более корректно отрабатывает случаи с чередованием заглавных букв. Например:
|
||||
//
|
||||
// "ЧАЩА" -> "CHASCHA"
|
||||
// "ЧаЩа" -> "ChaScha"
|
||||
// "Чаща" -> "Chascha"
|
||||
// "чаЩА" -> "chaSCHA"
|
||||
//
|
||||
// Для транслитерации русских букв в ней уже предусмотрен встроенный словарь. Для других языков
|
||||
// вы можете задать свой. Все достаточно просто:
|
||||
//
|
||||
// import "github.com/andoma-go/translit"
|
||||
//
|
||||
// tests := []string{
|
||||
// "Проверочная СТРОКА для транслитерации",
|
||||
// "ЧАЩА",
|
||||
// "ЧаЩа",
|
||||
// "Чаща",
|
||||
// "чаЩА",
|
||||
// }
|
||||
// for _, text := range tests {
|
||||
// fmt.Println(translit.Ru(text))
|
||||
// }
|
||||
package translit
|
||||
|
||||
import (
|
||||
@@ -57,9 +23,6 @@ type Map map[rune]string
|
||||
// "ЧаЩа" -> "ChaScha"
|
||||
// "Чаща" -> "Chascha"
|
||||
// "чаЩА" -> "chaSCHA"
|
||||
//
|
||||
// При желании, вы можете указать любую таблицу в качестве второго параметра при вызове функции,
|
||||
// по которой и будет выполнено данное преобразование.
|
||||
func (m Map) Translate(text string) string {
|
||||
src := []rune(text) // преобразуем текст в набор символов
|
||||
|
||||
@@ -77,7 +40,7 @@ func (m Map) Translate(text string) string {
|
||||
(i < len(src)-1 && unicode.IsUpper(src[i+1])) {
|
||||
str = strings.ToUpper(str) // преобразуем все буквы в заглавные
|
||||
} else {
|
||||
str = toTitle.String(str) // преобразуем в заглавную только первый символ замены
|
||||
str = cases.Title(language.Und).String(str) // преобразуем в заглавную только первый символ замены
|
||||
}
|
||||
fallthrough // выполняем подмену
|
||||
default:
|
||||
@@ -87,6 +50,3 @@ func (m Map) Translate(text string) string {
|
||||
|
||||
return result.String()
|
||||
}
|
||||
|
||||
// toTitle преобразует первую букву в заглавную.
|
||||
var toTitle = cases.Title(language.Und)
|
||||
|
||||
+48
-21
@@ -1,26 +1,53 @@
|
||||
package translit_test
|
||||
package translit
|
||||
|
||||
import (
|
||||
"fmt"
|
||||
import "testing"
|
||||
|
||||
"github.com/andoma-go/translit"
|
||||
)
|
||||
|
||||
func ExampleRuTranslit() {
|
||||
tests := []string{
|
||||
"Проверочная СТРОКА для транслитерации",
|
||||
"ЧАЩА",
|
||||
"ЧаЩа",
|
||||
"Чаща",
|
||||
"чаЩА",
|
||||
func TestTranslate(t *testing.T) {
|
||||
type args struct {
|
||||
text string
|
||||
}
|
||||
for _, text := range tests {
|
||||
fmt.Println(translit.Ru(text))
|
||||
tests := []struct {
|
||||
name string
|
||||
m Map
|
||||
args args
|
||||
want string
|
||||
}{
|
||||
{
|
||||
name: "ru test 1",
|
||||
m: RuMap,
|
||||
args: args{text: "Проверочная СТРОКА для транслитерации"},
|
||||
want: "Proverochnaja STROKA dlja transliteracii",
|
||||
},
|
||||
{
|
||||
name: "ru test 2",
|
||||
m: RuMap,
|
||||
args: args{text: "ЧАЩА"},
|
||||
want: "CHASCHA",
|
||||
},
|
||||
{
|
||||
name: "ru test 3",
|
||||
m: RuMap,
|
||||
args: args{text: "ЧаЩа"},
|
||||
want: "ChaScha",
|
||||
},
|
||||
{
|
||||
name: "ru test 4",
|
||||
m: RuMap,
|
||||
args: args{text: "Чаща"},
|
||||
want: "Chascha",
|
||||
},
|
||||
{
|
||||
name: "ru test 5",
|
||||
m: RuMap,
|
||||
args: args{text: "чаЩА"},
|
||||
want: "chaSCHA",
|
||||
},
|
||||
}
|
||||
for _, tt := range tests {
|
||||
t.Run(tt.name, func(t *testing.T) {
|
||||
if got := tt.m.Translate(tt.args.text); got != tt.want {
|
||||
t.Errorf("Map.Translate() = %v, want %v", got, tt.want)
|
||||
}
|
||||
})
|
||||
}
|
||||
// Output:
|
||||
// Proverochnaja STROKA dlja transliteracii
|
||||
// CHASCHA
|
||||
// ChaScha
|
||||
// Chascha
|
||||
// chaSCHA
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user