Translittération de texte russe pour l'envoi de messages à Telegram depuis Mikrotik RouterOS

J'ai récemment écrit une fonction de conversion pour envoyer des messages en russe vers Telegram depuis Mikrotik RouterOS, comme indiqué ici .



Maintenant, le travail a été complété par la création d'une fonction de translittération qui convertit une chaîne de texte russe en translittération de l'alphabet latin. De plus, si la chaîne contient des caractères latins, ils ne sont pas traduits, c'est-à-dire que la fonction peut recevoir une chaîne mixte de caractères et de mots en argument.



La conversion des caractères est effectuée selon GOST 7.79-2000 (système B) . Les règles spéciales de translittération des noms ne sont pas prises en compte, sauf que la conversion spéciale des terminaisons "LE" est traduite par "IE" et "OY" par "IJ".



Voici le code de fonction complet:



# Function Translite of Russian characters for sending in Telegram
# by Sertik 16/09/2020
# usage [$FuncTransliteToTele " String .,!+"]
:global FuncTransliteToTele do={

:global string; :set $string $1;

#  table of the codes of Russian letters Translite
:local rsimv [:toarray {""="A"; ""="B"; ""="V"; ""="G"; ""="D"; ""="E"; ""="ZH"; ""="Z"; ""="I"; ""="J"; ""="K"; ""="L"; ""="M"; ""="N"; ""="O"; ""="P"; ""="R"; ""="S"; ""="T"; ""="U"; ""="F"; ""="KH"; ""="C"; ""="CH"; ""="SH"; ""="SCH"; ""="``"; ""="Y`"; ""="`"; ""="E`"; ""="JU"; ""="YA"; ""="a"; ""="b"; ""="v"; ""="g"; ""="d"; ""="e"; ""="zh"; ""="z"; ""="i"; ""="j"; ""="k"; ""="l"; ""="m"; ""="n"; ""="o"; ""="p"; ""="r"; ""="s"; ""="t"; ""="u"; ""="f"; ""="kh"; ""="c"; ""="ch"; ""="sh"; ""="sch"; ""="``"; ""="y`"; ""="`"; ""="e`"; ""="ju"; ""="ya"; ""="Yo"; ""="yo"; "№"="#"}]

# encoding of the symbols and ssembly line
:local StrTele ""; :local code "";
:for i from=0 to=([:len $string]-1) do={:local keys [:pick $string $i (1+$i)];

:local key ($rsimv->$keys); if ([:len $key]!=0) do={:set $code ($rsimv->$keys);} else={:set $code $keys};
:if (($keys="")  and ([:pick $string ($i+1) (2+$i)]="")) do={:set $code "I"; :set $i ($i+1)}
:if (($keys="")  and ([:pick $string ($i+1) (2+$i)]="")) do={:set $code "i"; :set $i ($i+1)}
:if (($keys="")  and ([:pick $string ($i+1) (2+$i)]="")) do={:set $code "I"; :set $i ($i+1)}
:if (($keys="")  and ([:pick $string ($i+1) (2+$i)]="")) do={:set $code "i"; :set $i ($i+1)}
:if (($keys="")  and ([:pick $string ($i+1) (2+$i)]="")) do={:set $code "I"; :set $i ($i+1)}
:if (($keys="")  and ([:pick $string ($i+1) (2+$i)]="")) do={:set $code "i"; :set $i ($i+1)}
:if (($keys="")  and ([:pick $string ($i+1) (2+$i)]="")) do={:set $code "i"; :set $i ($i+1)}
:if (($keys="")  and ([:pick $string ($i+1) (2+$i)]="")) do={:set $code "I"; :set $i ($i+1)}
 :set $StrTele ("$StrTele"."$code")}

:set $string $StrTele
:return $string;
}


Voici un exemple de son fonctionnement:



:local string [$FuncTransliteToTele "   !  - Russian alfabit  Telegramm.  "]
:log warning $string


Sortie du



journal : Privet ot Mikrotik! Rabotaet funksiya-konverter Russian-alfabit dliya Telegramm. Zayac beliy.



L'utilisateur peut corriger la table de translittération pour le standard utilisé par lui. J'espère que cela sera utile à quelqu'un. Vous pouvez maintenant être calme sur l'envoi de messages russes à Telegram à la fois en les convertissant en codes UTF-8 à l'aide de ma fonction de conversion à partir d'ici et par translittération.



All Articles