2
0

Описание

This commit is contained in:
Dmitry Sedykh
2014-08-17 09:40:29 +04:00
parent b1203d54f0
commit 597b9690e4
+31 -56
View File
@@ -1,64 +1,39 @@
# Библиотека для транслитерации строк
# Библиотека для транслитерации строк на Go
Для использования библиотеки в Go выполните команду:
Хоть кода в этой библиотеке и не очень много, но некоторое время на нее все-таки было потрачено, т.к. раньше я просто не задумывался о некоторых аспектах работы с транслитерацией.
$ go get -u github.com/mdigger/translit
и пропишите ее в заголовке своего кода:
import "github.com/mdigger/translit"
Данная библиотека обеспечивает простую транслитерацию. Для этого достаточно
только описать соответствующую таблицу подстановки символов, в которой буква
проассоциирована с какой-либо строкой. В частности, такая ассоциация для
транслитерации русского языка уже определена.
Текущая реализация подразумевает только одностороннюю транслитерацию: обратное
преобразование будет уже не так очевидно.
## Использование
```go
var RuTransiltMap = map[rune]string{
'а': "a",
'б': "b",
'в': "v",
...
'ю': "ju",
'я': "ja",
}
```
`RuTransiltMap` описывает замены русских букв на английские при транслитерации.
Некоторые буквы заменяются не на одну, а на две или три буквы латинского
алфавита. А мягкий знак вообще исчезает. Но такова обычная распространенная
схема транслитерации.
#### func RuTranslit
```go
func RuTranslit(text string) string
```
`RuTranslit` выполняет транслитерацию строки с учетом словаря для русской
транслитерации.
#### func Translit
```go
func Translit(text string, translitMap map[rune]string) string
```
`Translit` выполняет транслитерацию в строке по указанной таблице и возвращает
новую строку с результатом такого преобразования. Все символы, которые не
указаны в таблице транслитерации, останутся без изменения.
При транслитерировании учитывается, что замена буквы может быть произведена на
строку произвольной длины и корректно обрабатываются чередования заглавных и
строчных букв. В частности, производится корректная транслитерация следующих
случаев при использовании русского словаря:
В общем, как и большинство других аналогичных библиотек, она перебирает все символы в строке и заменяет их по предложенному ей словарю. Отличие только в том, что, с моей точки зрения, она более корректно отрабатывает случаи с чередованием заглавных букв. Например:
"ЧАЩА" -> "CHASCHA"
"ЧаЩа" -> "ChaScha"
"Чаща" -> "Chascha"
"чаЩА" -> "chaSCHA"
При желании, вы можете указать любую таблицу в качестве второго параметра при
вызове функции, по которой и будет выполнено данное преобразование.
Для транслитерации русских букв в ней уже предусмотрен встроенный словарь. Для других языков вы можете задать свой. Все достаточно просто:
```go
package translit_test
import (
"fmt"
"github.com/mdigger/translit"
)
func ExampleRuTranslit() {
tests := []string{
"Проверочная СТРОКА для транслитерации",
"ЧАЩА",
"ЧаЩа",
"Чаща",
"чаЩА",
}
for _, text := range tests {
fmt.Println(translit.RuTranslit(text))
}
// Output:
// Proverochnaja STROKA dlja transliteracii
// CHASCHA
// ChaScha
// Chascha
}
```