golang实现西里尔字母到拉丁字母多种转换方式的插件库iuliia-go的使用
Golang实现西里尔字母到拉丁字母多种转换方式的插件库iuliia-go的使用
简介
Iuliia
是一个用于将西里尔字母转换为拉丁字母的Golang库,它提供了多种转换方式。这个库是Python库iuliia的Golang移植版本。
为什么使用Iuliia
- 提供20种转换方案(规则集),包括所有主要的国际标准和俄罗斯标准
- 不仅实现基本映射,还正确实现了字母组合和词尾的特殊规则
- 简单的API且无第三方依赖
安装
go get github.com/mehanizm/iuliia-go
schemas
文件夹是从主仓库克隆的git子模块。您可以手动添加方案并使用生成命令生成所有代码和测试:
go generate
使用示例
基本用法
package main
import (
"fmt"
iuliia "github.com/mehanizm/iuliia-go"
)
func main() {
// 使用Wikipedia方案转换
translated := iuliia.Wikipedia.Translate("Юлия Щеглова")
fmt.Println(translated)
// 输出: Yuliya Shcheglova
// 使用Telegram方案转换
translated = iuliia.Telegram.Translate("Привет. Как у тебя дела?")
fmt.Println(translated)
// 输出: Privet. Kak u tebya dela?
}
支持的转换方案
Iuliia支持以下转换方案:
- ala_lc: ALA-LC转换方案
- ala_lc_alt: ALA-LC转换方案
- bgn_pcgn: BGN/PCGN转换方案
- bgn_pcgn_alt: BGN/PCGN转换方案
- bs_2979: 英国标准2979:1958转换方案
- bs_2979_alt: 英国标准2979:1958转换方案
- gost_16876: GOST 16876-71(又称GOST 1983)转换方案
- gost_16876_alt: GOST 16876-71(又称GOST 1983)转换方案
- gost_52290: GOST R 52290-2004转换方案
- gost_52535: GOST R 52535.1-2006转换方案
- gost_7034: GOST R 7.0.34-2014转换方案
- gost_779: GOST 7.79-2000(又称ISO 9:1995)转换方案
- gost_779_alt: GOST 7.79-2000(又称ISO 9:1995)转换方案
- icao_doc_9303: ICAO DOC 9303转换方案
- iso_9_1954: ISO/R 9:1954转换方案
- iso_9_1968: ISO/R 9:1968转换方案
- iso_9_1968_alt: ISO/R 9:1968转换方案
- mosmetro: 莫斯科地铁地图转换方案
- mvd_310: MVD 310-1997转换方案
- mvd_310_fr: MVD 310-1997转换方案
- mvd_782: MVD 782-2000转换方案
- scientific: 科学转换方案
- telegram: Telegram转换方案
- ungegn_1987: UNGEGN 1987 V/18转换方案
- wikipedia: Wikipedia转换方案
- yandex_maps: Yandex.Maps转换方案
- yandex_money: Yandex.Money转换方案
CLI界面
在cmd
文件夹中可以找到一个CLI应用程序来测试转换功能。
# 运行帮助
./iuliia -h
> Usage of ./iuliia:
> -schema string
> choose schema name (default "wikipedia")
> -show
> showing list of the schemas
# 简单运行程序
./iuliia
> type phrase to translate with schema wikipedia:
> 'quit' to exit or 'help' to get help
> >
# 显示帮助
> help
>> * show - to show all schemas
>> * change schema_name - to change schema
>> * quit - to quit the program
>> type phrase to translate with schema wikipedia:
>> 'quit' to exit or 'help' to get help
# 转换示例
> Привет. Как у тебя дела?
>> Privet. Kak u tebya dela?
# 显示所有方案
> show
>> ala_lc: ALA-LC transliteration schema.
>> ala_lc_alt: ALA-LC transliteration schema.
>> bgn_pcgn: BGN/PCGN transliteration schema
>> bgn_pcgn_alt: BGN/PCGN transliteration schema
>> bs_2979: British Standard 2979:1958 transliteration schema
>> bs_2979_alt: British Standard 2979:1958 transliteration schema
>> gost_16876: GOST 16876-71 (aka GOST 1983) transliteration schema
>> gost_16876_alt: GOST 16876-71 (aka GOST 1983) transliteration schema
>> gost_52290: GOST R 52290-2004 transliteration schema
>> gost_52535: GOST R 52535.1-2006 transliteration schema
>> gost_7034: GOST R 7.0.34-2014 transliteration schema
>> gost_779: GOST 7.79-2000 (aka ISO 9:1995) transliteration schema
>> gost_779_alt: GOST 7.79-2000 (aka ISO 9:1995) transliteration schema
>> icao_doc_9303: ICAO DOC 9303 transliteration schema
>> iso_9_1954: ISO/R 9:1954 transliteration schema
>> iso_9_1968: ISO/R 9:1968 transliteration schema
>> iso_9_1968_alt: ISO/R 9:1968 transliteration schema
>> mosmetro: Moscow Metro map transliteration schema
>> mvd_310: MVD 310-1997 transliteration schema
>> mvd_310_fr: MVD 310-1997 transliteration schema
>> mvd_782: MVD 782-2000 transliteration schema
>> scientific: Scientific transliteration schema
>> telegram: Telegram transliteration schema
>> ungegn_1987: UNGEGN 1987 V/18 transliteration schema
>> wikipedia: Wikipedia transliteration schema
>> yandex_maps: Yandex.Maps transliteration schema
>> yandex_money: Yandex.Money transliteration schema
# 更改方案
> change telegram
>> schema was changed to telegram
>>
>> type phrase to translate with schema telegram:
>> 'quit' to exit or 'help' to get help
贡献
欢迎提交Pull Request。对于重大更改,请先提出问题讨论您想要更改的内容。
确保添加或更新适当的测试。
许可证
MIT
更多关于golang实现西里尔字母到拉丁字母多种转换方式的插件库iuliia-go的使用的实战教程也可以访问 https://www.itying.com/category-94-b0.html
1 回复
更多关于golang实现西里尔字母到拉丁字母多种转换方式的插件库iuliia-go的使用的实战系列教程也可以访问 https://www.itying.com/category-94-b0.html
使用iuliia-go实现西里尔字母到拉丁字母的转换
iuliia-go是一个Golang实现的西里尔字母(俄语等)到拉丁字母转换的库,它支持多种转换方案(如ISO 9、科学转写、护照标准等)。
安装
go get github.com/mehanon/iuliia-go
基本使用示例
package main
import (
"fmt"
"github.com/mehanon/iuliia-go"
"github.com/mehanon/iuliia-go/schema"
)
func main() {
// 要转换的西里尔文本
cyrillicText := "Привет, мир! Это тест iuliia-go."
// 使用不同的方案进行转换
fmt.Println("ISO 9 (1954):", iuliia.Translate(cyrillicText, schema.Iso9_1954))
fmt.Println("科学转写:", iuliia.Translate(cyrillicText, schema.Scientific))
fmt.Println("俄罗斯护照标准(1997):", iuliia.Translate(cyrillicText, schema.Passport1997))
fmt.Println("维基百科标准:", iuliia.Translate(cyrillicText, schema.Wikipedia))
}
支持的转换方案
iuliia-go支持多种转换方案,包括:
schema.Iso9_1954
- ISO 9:1954标准schema.Iso9_1968
- ISO 9:1968标准schema.Iso9_1968_alt
- ISO 9:1968替代方案schema.Scientific
- 科学转写schema.Passport1997
- 俄罗斯护照标准(1997)schema.Passport2010
- 俄罗斯护照标准(2010)schema.Passport2013
- 俄罗斯护照标准(2013)schema.Telegram
- Telegram风格schema.YandexMaps
- Yandex地图风格schema.YandexMoney
- Yandex Money风格schema.Mosmetro
- 莫斯科地铁风格schema.Wikipedia
- 维基百科标准
高级用法
自定义转换方案
你可以创建自己的转换方案:
customSchema := schema.Schema{
Name: "My Custom Schema",
Mapping: map[rune]string{
'А': "A", 'а': "a",
'Б': "B", 'б': "b",
// 添加更多映射...
},
PrevMapping: map[rune]string{},
NextMapping: map[rune]string{},
EndingMapping: map[rune]string{},
}
fmt.Println(iuliia.Translate("Привет", customSchema))
处理特定上下文
某些方案支持上下文相关的转换(如前后的字母会影响当前字母的转换):
// 使用支持上下文转换的方案
text := "Подъём"
fmt.Println("上下文转换示例:", iuliia.Translate(text, schema.Passport2013))
性能考虑
对于大量文本的转换,可以重用schema对象:
// 创建一次schema对象
sch := schema.Passport2013
// 多次使用
for _, text := range largeTextCollection {
translated := iuliia.Translate(text, sch)
// 处理转换后的文本
}
实际应用示例
package main
import (
"fmt"
"github.com/mehanon/iuliia-go"
"github.com/mehanon/iuliia-go/schema"
)
func main() {
// 用户数据转换示例
userData := map[string]string{
"firstName": "Александр",
"lastName": "Пушкин",
"city": "Москва",
}
fmt.Println("用户数据转换:")
for field, value := range userData {
fmt.Printf("%s: %s → %s (ISO 9)\n",
field,
value,
iuliia.Translate(value, schema.Iso9_1954))
fmt.Printf("%s: %s → %s (护照2013)\n",
field,
value,
iuliia.Translate(value, schema.Passport2013))
}
// 地址转换示例
address := "ул. Тверская, д. 7, кв. 42, г. Санкт-Петербург"
fmt.Println("\n地址转换:")
fmt.Println("原始:", address)
fmt.Println("Yandex地图风格:", iuliia.Translate(address, schema.YandexMaps))
fmt.Println("维基百科风格:", iuliia.Translate(address, schema.Wikipedia))
}
注意事项
- 转换结果可能会因方案不同而有很大差异
- 某些方案更适合特定用途(如护照、地图等)
- 不是所有方案都是可逆的
- 某些方案会保留非西里尔字符不变
iuliia-go提供了一种灵活的方式来处理西里尔到拉丁字母的转换,特别适合需要支持多种标准的国际化应用。