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支持多种转换方案,包括:

  1. schema.Iso9_1954 - ISO 9:1954标准
  2. schema.Iso9_1968 - ISO 9:1968标准
  3. schema.Iso9_1968_alt - ISO 9:1968替代方案
  4. schema.Scientific - 科学转写
  5. schema.Passport1997 - 俄罗斯护照标准(1997)
  6. schema.Passport2010 - 俄罗斯护照标准(2010)
  7. schema.Passport2013 - 俄罗斯护照标准(2013)
  8. schema.Telegram - Telegram风格
  9. schema.YandexMaps - Yandex地图风格
  10. schema.YandexMoney - Yandex Money风格
  11. schema.Mosmetro - 莫斯科地铁风格
  12. 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))
}

注意事项

  1. 转换结果可能会因方案不同而有很大差异
  2. 某些方案更适合特定用途(如护照、地图等)
  3. 不是所有方案都是可逆的
  4. 某些方案会保留非西里尔字符不变

iuliia-go提供了一种灵活的方式来处理西里尔到拉丁字母的转换,特别适合需要支持多种标准的国际化应用。

回到顶部