From d412da9f09355ce512e12de49433e82c4b58d8ac Mon Sep 17 00:00:00 2001 From: Evgeniy Vasilev Date: Tue, 27 Sep 2022 22:29:43 +0200 Subject: [PATCH] Adds support for Bulgarian language (#66) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * Adds support for Bulgarian language * Alphabetic sort Co-authored-by: Dobrosław Żybort --- languages_substitution.go | 64 +++++++++++++++++++++++++++++++++++++++ slug.go | 2 ++ slug_test.go | 6 ++++ 3 files changed, 72 insertions(+) diff --git a/languages_substitution.go b/languages_substitution.go index ad0963f..54a044d 100644 --- a/languages_substitution.go +++ b/languages_substitution.go @@ -10,6 +10,7 @@ func init() { // TODO: Find better way so all langs are merged automatically and better // tested. for _, sub := range []*map[rune]string{ + &bgSub, &csSub, &deSub, &enSub, @@ -189,3 +190,66 @@ var trSub = map[rune]string{ 'ç': "c", 'Ç': "C", } + +var bgSub = map[rune]string{ + 'А': "A", + 'Б': "B", + 'В': "V", + 'Г': "G", + 'Д': "D", + 'Е': "E", + 'Ж': "Zh", + 'З': "Z", + 'И': "I", + 'Й': "Y", + 'К': "K", + 'Л': "L", + 'М': "M", + 'Н': "N", + 'О': "O", + 'П': "P", + 'Р': "R", + 'С': "S", + 'Т': "T", + 'У': "U", + 'Ф': "F", + 'Х': "H", + 'Ц': "Ts", + 'Ч': "Ch", + 'Ш': "Sh", + 'Щ': "Sh", + 'Ъ': "A", + 'Ь': "Y", + 'Ю': "Yu", + 'Я': "Ya", + 'а': "a", + 'б': "b", + 'в': "v", + 'г': "g", + 'д': "d", + 'е': "e", + 'ж': "zh", + 'з': "z", + 'и': "i", + 'й': "y", + 'к': "k", + 'л': "l", + 'м': "m", + 'н': "n", + 'о': "o", + 'п': "p", + 'р': "r", + 'с': "s", + 'т': "t", + 'у': "u", + 'ф': "f", + 'х': "h", + 'ц': "ts", + 'ч': "ch", + 'ш': "sh", + 'щ': "sht", + 'ъ': "a", + 'ь': "y", + 'ю': "yu", + 'я': "ya", +} diff --git a/slug.go b/slug.go index 14acce7..98192f1 100644 --- a/slug.go +++ b/slug.go @@ -57,6 +57,8 @@ func MakeLang(s string, lang string) (slug string) { // Process string with selected substitution language. // Catch ISO 3166-1, ISO 639-1:2002 and ISO 639-3:2007. switch strings.ToLower(lang) { + case "bg", "bgr": + slug = SubstituteRune(slug, bgSub) case "cs", "ces": slug = SubstituteRune(slug, csSub) case "de", "deu": diff --git a/slug_test.go b/slug_test.go index baace64..0505da1 100644 --- a/slug_test.go +++ b/slug_test.go @@ -73,6 +73,8 @@ func TestSlugMakeLang(t *testing.T) { want string lowercase bool }{ + {"bg", "АБВГДЕЖЗИЙКЛМНОПРСТУФХЦЧШЩЪЬЮЯабвгдежзийклмнопрстуфхцчшщъьюя", "abvgdezhziyklmnoprstufhtschshshayyuyaabvgdezhziyklmnoprstufhtschshshtayyuya", true}, + {"bg", "АБВГДЕЖЗИЙКЛМНОПРСТУФХЦЧШЩЪЬЮЯабвгдежзийклмнопрстуфхцчшщъьюя", "ABVGDEZhZIYKLMNOPRSTUFHTsChShShAYYuYaabvgdezhziyklmnoprstufhtschshshtayyuya", false}, {"cs", "ěščřžýáíéúůóňťĚŠČŘŽÝÁÍÉÚŮÓŇŤ", "escrzyaieuuontescrzyaieuuont", true}, {"cs", "ěščřžýáíéúůóňťĚŠČŘŽÝÁÍÉÚŮÓŇŤ", "escrzyaieuuontESCRZYAIEUUONT", false}, {"ces", "ěščřžýáíéúůóňťĚŠČŘŽÝÁÍÉÚŮÓŇŤ", "escrzyaieuuontescrzyaieuuont", true}, @@ -94,7 +96,9 @@ func TestSlugMakeLang(t *testing.T) { {"tr", "şüöğıçŞÜÖİĞÇ", "suogicSUOIGC", false}, {"kk", "әғһіңөқұүӘҒҺІҢӨҚҰҮ", "aghinoquuaghinoquu", true}, {"kk", "әғһіңөқұүӘҒҺІҢӨҚҰҮ", "aghinoquuAGHINOQUU", false}, + // & fun. + {"bg", "Това и онова", "tova-i-onova", true}, {"cs", "Toto & Tamto", "toto-a-tamto", true}, {"cs", "Toto & Tamto", "Toto-a-Tamto", false}, {"cs", "Toto @ Tamto", "toto-zavinac-tamto", true}, @@ -132,8 +136,10 @@ func TestSlugMakeLang(t *testing.T) { {"sl", "đanković & Kožušček", "dzankovic-in-kozuscek", true}, {"sl", "ĐankoVIĆ & KOŽUŠČEK", "DZankoVIC-in-KOZUSCEK", false}, {"test", "This & that", "this-and-that", true}, // unknown lang, fallback to "en" + // Test defaultSub, when adding new lang copy/paste this line, // it contain special characters. + {"bg", "1\"2'3’4‒5–6—7―8", "1234-5-6-7-8", true}, {"cs", "1\"2'3’4‒5–6—7―8", "1234-5-6-7-8", true}, {"de", "1\"2'3’4‒5–6—7―8", "1234-5-6-7-8", true}, {"en", "1\"2'3’4‒5–6—7―8", "1234-5-6-7-8", true},