Транслитерация

Oleg_M

Client
Регистрация
27.02.2015
Сообщения
72
Благодарностей
28
Баллы
18
По мотивам этой темы: http://zennolab.com/discussion/threads/perekodirovka-rus-lat.15930/#post-97615
сделал .dll-ку, добавил в External Asamblies

2015.11.15-19.21.46.jpg

Добавил ссылку в GAC

2015.11.15-19.25.09.jpg

Прописал using.

2015.11.15-19.27.58.jpg

В итоге получил:

2015.11.15-19.29.49.jpg
Кто знает, в чем проблема, не пройдите мимо. Очень надо транслитерация через c#.
Спасибо!
P.S. Версия 5.9.5.1
 

ssXXXss

Client
Регистрация
23.12.2014
Сообщения
7 375
Благодарностей
2 040
Баллы
113
а для чего через С#, в гугле полно тем если на то пошло, и это всё лишнее что ты добавляешь
 

Oleg_M

Client
Регистрация
27.02.2015
Сообщения
72
Благодарностей
28
Баллы
18
а для чего через С#, в гугле полно тем если на то пошло, и это всё лишнее что ты добавляешь
Почему лишнее?

У меня есть сниппет, где гора кода сверху и столько же снизу и все это в цикле. Так вот между двумя этими кучами кода нужно сделать транслитерацию. Стандартный экшен туда не вставишь(.
 

ssXXXss

Client
Регистрация
23.12.2014
Сообщения
7 375
Благодарностей
2 040
Баллы
113
без dll и using, удали их у себя, и для каждого транслита есть свой гост, поэтому найди свой какой тебе надо и подредактируй
C#:
string[] Rus = {  "щ",   "Щ",  "ю", "Ю", "я", "Я", "ч", "Ч", "ш", "Ш", "х", "Х", "э", "Э", "ё", "Ё", "ж", "Ж",   "а","А","б","Б","в","В","г","Г","д","Д","е","Е","з","З","и","И","й","Й","к","К","л","Л","м","М","н","Н","о","О","п","П","р","Р","с","С","т","T","у","У","ф","Ф","ц","Ц","ъ","Ъ","ы","Ы","ь","Ь"};
string[] Eng = { "sch","SCH","yu","YU","ya","YA","ch","CH","sh","SH","kh","KH","eh","EH","jo","JO","zh","ZH",  "a","A","b","B","v","V","g","G","d","D","e","E","z","Z","i","I","y","Y","k","K","l","L","m","M","n","N","o","O","p","P","r","R","s","S","t","T","u","U","f","F","c","C","“","“","i","I","‘","‘"};
string str = "";
str = project.Variables["translit"].Value;{
    int i = 0;
    while (i < Rus.Length){
        str = str.Replace(Rus[i], Eng[i]);
        i++;
    }
}
project.SendInfoToLog("", str, true);
Транслит с русского на латиницу
 
Последнее редактирование:

Oleg_M

Client
Регистрация
27.02.2015
Сообщения
72
Благодарностей
28
Баллы
18
Большое тебе человеческое спасибо, что уделил время!
Смотри как заработало:
2015.11.15-21.06.18.jpg
У тебя решение тоже пойдет, но тут кода поменьше.
 

ssXXXss

Client
Регистрация
23.12.2014
Сообщения
7 375
Благодарностей
2 040
Баллы
113
dll таскать за собой если 100 клиентов как то не очень, если для себя то да
 

ssXXXss

Client
Регистрация
23.12.2014
Сообщения
7 375
Благодарностей
2 040
Баллы
113

Oleg_M

Client
Регистрация
27.02.2015
Сообщения
72
Благодарностей
28
Баллы
18
Согласен. Но лучше 2 решения, чем ни одного.
 

AZANIR

Client
Регистрация
09.06.2014
Сообщения
405
Благодарностей
199
Баллы
43
у меня ругалось сделал так все отлично работает
этот код добавлять в общий код, или внизу аттач с ДЛЛ кому нужно.

Код:
using System;
using System.Collections.Generic;
using System.Text;


namespace Transliteration
{
    public enum TransliterationType
    {
        Gost,
        ISO
    }
    public static class Transliteration
    {
        private static Dictionary<string, string> gost = new Dictionary<string, string>(); //ГОСТ 16876-71
        private static Dictionary<string, string> iso = new Dictionary<string, string>(); //ISO 9-95

        public static string Front(string text)
        {
            return Front(text, TransliterationType.ISO);
        }
        public static string Front(string text, TransliterationType type)
        {
            string output = text;
            Dictionary<string, string> tdict = GetDictionaryByType(type);

            foreach (KeyValuePair<string, string> key in tdict)
            {
                output = output.Replace(key.Key, key.Value);
            }
            return output;
        }
        public static string Back(string text)
        {
            return Back(text, TransliterationType.ISO);
        }
        public static string Back(string text, TransliterationType type)
        {
            string output = text;
            Dictionary<string, string> tdict = GetDictionaryByType(type);

            foreach (KeyValuePair<string, string> key in tdict)
            {
                output = output.Replace(key.Value, key.Key);
            }
            return output;
        }

        private static Dictionary<string, string> GetDictionaryByType(TransliterationType type)
        {
            Dictionary<string, string> tdict = iso;
            if (type == TransliterationType.Gost) tdict = gost;
            return tdict;
        }

        static Transliteration()
        {
            gost.Add("Є", "EH");
            gost.Add("І", "I");
            gost.Add("і", "i");
            gost.Add("№", "#");
            gost.Add("є", "eh");
            gost.Add("А", "A");
            gost.Add("Б", "B");
            gost.Add("В", "V");
            gost.Add("Г", "G");
            gost.Add("Д", "D");
            gost.Add("Е", "E");
            gost.Add("Ё", "JO");
            gost.Add("Ж", "ZH");
            gost.Add("З", "Z");
            gost.Add("И", "I");
            gost.Add("Й", "JJ");
            gost.Add("К", "K");
            gost.Add("Л", "L");
            gost.Add("М", "M");
            gost.Add("Н", "N");
            gost.Add("О", "O");
            gost.Add("П", "P");
            gost.Add("Р", "R");
            gost.Add("С", "S");
            gost.Add("Т", "T");
            gost.Add("У", "U");
            gost.Add("Ф", "F");
            gost.Add("Х", "KH");
            gost.Add("Ц", "C");
            gost.Add("Ч", "CH");
            gost.Add("Ш", "SH");
            gost.Add("Щ", "SHH");
            gost.Add("Ъ", "'");
            gost.Add("Ы", "Y");
            gost.Add("Ь", "");
            gost.Add("Э", "EH");
            gost.Add("Ю", "YU");
            gost.Add("Я", "YA");
            gost.Add("а", "a");
            gost.Add("б", "b");
            gost.Add("в", "v");
            gost.Add("г", "g");
            gost.Add("д", "d");
            gost.Add("е", "e");
            gost.Add("ё", "jo");
            gost.Add("ж", "zh");
            gost.Add("з", "z");
            gost.Add("и", "i");
            gost.Add("й", "jj");
            gost.Add("к", "k");
            gost.Add("л", "l");
            gost.Add("м", "m");
            gost.Add("н", "n");
            gost.Add("о", "o");
            gost.Add("п", "p");
            gost.Add("р", "r");
            gost.Add("с", "s");
            gost.Add("т", "t");
            gost.Add("у", "u");

            gost.Add("ф", "f");
            gost.Add("х", "kh");
            gost.Add("ц", "c");
            gost.Add("ч", "ch");
            gost.Add("ш", "sh");
            gost.Add("щ", "shh");
            gost.Add("ъ", "");
            gost.Add("ы", "y");
            gost.Add("ь", "");
            gost.Add("э", "eh");
            gost.Add("ю", "yu");
            gost.Add("я", "ya");
            gost.Add("«", "");
            gost.Add("»", "");
            gost.Add("—", "-");

            iso.Add("Є", "YE");
            iso.Add("І", "I");
            iso.Add("Ѓ", "G");
            iso.Add("і", "i");
            iso.Add("№", "#");
            iso.Add("є", "ye");
            iso.Add("ѓ", "g");
            iso.Add("А", "A");
            iso.Add("Б", "B");
            iso.Add("В", "V");
            iso.Add("Г", "G");
            iso.Add("Д", "D");
            iso.Add("Е", "E");
            iso.Add("Ё", "YO");
            iso.Add("Ж", "ZH");
            iso.Add("З", "Z");
            iso.Add("И", "I");
            iso.Add("Й", "J");
            iso.Add("К", "K");
            iso.Add("Л", "L");
            iso.Add("М", "M");
            iso.Add("Н", "N");
            iso.Add("О", "O");
            iso.Add("П", "P");
            iso.Add("Р", "R");
            iso.Add("С", "S");
            iso.Add("Т", "T");
            iso.Add("У", "U");
            iso.Add("Ф", "F");
            iso.Add("Х", "X");
            iso.Add("Ц", "C");
            iso.Add("Ч", "CH");
            iso.Add("Ш", "SH");
            iso.Add("Щ", "SHH");
            iso.Add("Ъ", "'");
            iso.Add("Ы", "Y");
            iso.Add("Ь", "");
            iso.Add("Э", "E");
            iso.Add("Ю", "YU");
            iso.Add("Я", "YA");
            iso.Add("а", "a");
            iso.Add("б", "b");
            iso.Add("в", "v");
            iso.Add("г", "g");
            iso.Add("д", "d");
            iso.Add("е", "e");
            iso.Add("ё", "yo");
            iso.Add("ж", "zh");
            iso.Add("з", "z");
            iso.Add("и", "i");
            iso.Add("й", "j");
            iso.Add("к", "k");
            iso.Add("л", "l");
            iso.Add("м", "m");
            iso.Add("н", "n");
            iso.Add("о", "o");
            iso.Add("п", "p");
            iso.Add("р", "r");
            iso.Add("с", "s");
            iso.Add("т", "t");
            iso.Add("у", "u");
            iso.Add("ф", "f");
            iso.Add("х", "x");
            iso.Add("ц", "c");
            iso.Add("ч", "ch");
            iso.Add("ш", "sh");
            iso.Add("щ", "shh");
            iso.Add("ъ", "");
            iso.Add("ы", "y");
            iso.Add("ь", "");
            iso.Add("э", "e");
            iso.Add("ю", "yu");
            iso.Add("я", "ya");
            iso.Add("«", "");
            iso.Add("»", "");
            iso.Add("—", "-");
        }
    }
}
вот и длл.
 

Вложения

hard176

Client
Регистрация
19.06.2014
Сообщения
43
Благодарностей
11
Баллы
8
А стандартными методами зеннки разве нельзя транслит сделать?
 
  • Спасибо
Реакции: Neval и sentinel

Oleg_M

Client
Регистрация
27.02.2015
Сообщения
72
Благодарностей
28
Баллы
18

AZANIR

Client
Регистрация
09.06.2014
Сообщения
405
Благодарностей
199
Баллы
43
я это сделал не для тех у кого новые версии зенно , а для тех у кого постарее, должна же быть альтернатива у людей ?
 

smartwisard

Client
Регистрация
17.01.2017
Сообщения
824
Благодарностей
83
Баллы
28
А можно, пожалуйста, обратный код уточнить? Латиницу в кириллицу.
Переделанный моими руками snippet кривой:

Код:
string[] Eng = { "sch","SCH","yu","YU","ya","YA","ch","CH","sh","SH","kh","KH","eh","EH","jo","JO","zh","ZH",  "a","A","b","B","v","V","g","G","d","D","e","E","z","Z","i","I","y","Y","k","K","l","L","m","M","n","N","o","O","p","P","r","R","s","S","t","T","u","U","f","F","c","C","“","“","i","I","‘","‘"};
string[] Rus = {  "щ",   "Щ",  "ю", "Ю", "я", "Я", "ч", "Ч", "ш", "Ш", "х", "Х", "э", "Э", "ё", "Ё", "ж", "Ж",   "а","А","б","Б","в","В","г","Г","д","Д","е","Е","з","З","и","И","й","Й","к","К","л","Л","м","М","н","Н","о","О","п","П","р","Р","с","С","т","T","у","У","ф","Ф","ц","Ц","ъ","Ъ","ы","Ы","ь","Ь"};
string str = "";
str = project.Variables["NameSurname"].Value;{
    int i = 0;
    while (i < Eng.Length){
        str = str.Replace(Eng[i], Rus[i]);
        i++;
    }
}
project.SendInfoToLog("", str, true);
Кому любопытно на ява: https://zennolab.com/discussion/threads/translit-naoborot.15091/
 

AZANIR

Client
Регистрация
09.06.2014
Сообщения
405
Благодарностей
199
Баллы
43
А можно, пожалуйста, обратный код уточнить? Латиницу в кириллицу.
Переделанный моими руками snippet кривой:

Код:
string[] Eng = { "sch","SCH","yu","YU","ya","YA","ch","CH","sh","SH","kh","KH","eh","EH","jo","JO","zh","ZH",  "a","A","b","B","v","V","g","G","d","D","e","E","z","Z","i","I","y","Y","k","K","l","L","m","M","n","N","o","O","p","P","r","R","s","S","t","T","u","U","f","F","c","C","“","“","i","I","‘","‘"};
string[] Rus = {  "щ",   "Щ",  "ю", "Ю", "я", "Я", "ч", "Ч", "ш", "Ш", "х", "Х", "э", "Э", "ё", "Ё", "ж", "Ж",   "а","А","б","Б","в","В","г","Г","д","Д","е","Е","з","З","и","И","й","Й","к","К","л","Л","м","М","н","Н","о","О","п","П","р","Р","с","С","т","T","у","У","ф","Ф","ц","Ц","ъ","Ъ","ы","Ы","ь","Ь"};
string str = "";
str = project.Variables["NameSurname"].Value;{
    int i = 0;
    while (i < Eng.Length){
        str = str.Replace(Eng[i], Rus[i]);
        i++;
    }
}
project.SendInfoToLog("", str, true);
Кому любопытно на ява: https://zennolab.com/discussion/threads/translit-naoborot.15091/
есть же стандартные методы зенно на сегодня



// Текст для обработки
string text = project.ExecuteMacro("размещено");
// Обработка текста "Транслитерация"
project.Variables["peremennaya"].Value = Macros.TextProcessing.Translit(text);

результат: razmeshcheno
 
  • Спасибо
Реакции: smartwisard

smartwisard

Client
Регистрация
17.01.2017
Сообщения
824
Благодарностей
83
Баллы
28
// Текст для обработки
string text = project.ExecuteMacro("размещено");
// Обработка текста "Транслитерация"
project.Variables["peremennaya"].Value = Macros.TextProcessing.Translit(text);

результат: razmeshcheno
Благодарю за отклик. И наоборот можно? Мне нужно наоборот.
 

AZANIR

Client
Регистрация
09.06.2014
Сообщения
405
Благодарностей
199
Баллы
43
Наоборот это как , транслит он и в африке транслит русские слова английскими символами.
 

smartwisard

Client
Регистрация
17.01.2017
Сообщения
824
Благодарностей
83
Баллы
28
Как сделать, чтобы латиница превратилась в русские буквы?
Я так понял, что здесь русские буквы превратились в латиницу.
// Текст для обработки
string text = project.ExecuteMacro("размещено");
// Обработка текста "Транслитерация"
project.Variables["peremennaya"].Value = Macros.TextProcessing.Translit(text);
результат: razmeshcheno
 

Mikhail B.

Client
Регистрация
23.12.2014
Сообщения
14 419
Благодарностей
5 454
Баллы
113
Как сделать, чтобы латиница превратилась в русские буквы?
Возьми этот код, это не транслит, а простая замена букв, пропиши сам себе какие надо.

Код:
string[] Eng = { "sch","SCH","yu","YU","ya","YA","ch","CH","sh","SH","kh","KH","eh","EH","jo","JO","zh","ZH",  "a","A","b","B","v","V","g","G","d","D","e","E","z","Z","i","I","y","Y","k","K","l","L","m","M","n","N","o","O","p","P","r","R","s","S","t","T","u","U","f","F","c","C","“","“","i","I","‘","‘"};
string[] Rus = {  "щ",   "Щ",  "ю", "Ю", "я", "Я", "ч", "Ч", "ш", "Ш", "х", "Х", "э", "Э", "ё", "Ё", "ж", "Ж",   "а","А","б","Б","в","В","г","Г","д","Д","е","Е","з","З","и","И","й","Й","к","К","л","Л","м","М","н","Н","о","О","п","П","р","Р","с","С","т","T","у","У","ф","Ф","ц","Ц","ъ","Ъ","ы","Ы","ь","Ь"};
string str = "";
str = project.Variables["NameSurname"].Value;{
    int i = 0;
    while (i < Eng.Length){
        str = str.Replace(Eng[i], Rus[i]);
        i++;
    }
}
project.SendInfoToLog("", str, true);
Если не получилось, то в 7 строке поменяй значения местами
Код:
(Eng[i], Rus[i])
 
  • Спасибо
Реакции: Alex62 и smartwisard

kagorec

Client
Регистрация
24.08.2013
Сообщения
979
Благодарностей
525
Баллы
93
Данные - Обработка текста и выбираем "Транслитерация"

Снипет C# на стандартных макросах, транслитит из переменной h1
C#:
string text = project.ExecuteMacro(project.Variables["h1"].Value);
text = Macros.TextProcessing.ToLower(text, "All");
text = Macros.TextProcessing.Translit(text);
text = Macros.TextProcessing.Replace(text, "[^a-z0-9]+", " ", "Regex", "All");
text = Macros.TextProcessing.Replace(text, "[\\s\\t]+", "-", "Regex", "All");
text = System.Text.RegularExpressions.Regex.Replace(text, @"^[-]+|[-]+$", "");
return text;
C#:
Hello world! - Привет мир!
hello-world-privet-mir
 
Последнее редактирование:

Кто просматривает тему: (Всего: 1, Пользователи: 0, Гости: 1)