Описание
This commit is contained in:
@@ -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"
|
||||||
"Чаща" -> "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
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|||||||
Reference in New Issue
Block a user