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