Transliteración de texto en ruso para enviar mensajes a Telegram desde Mikrotik RouterOS

Recientemente escribí una función de conversión para enviar mensajes en ruso a Telegram desde Mikrotik RouterOS, como se informa aquí .



Ahora el trabajo se ha complementado con la creación de una función de transliteración que convierte una cadena de texto ruso en una transliteración del alfabeto latino. Además, si la cadena contiene caracteres latinos, entonces no se traducen, es decir, se puede pasar a la función una cadena mixta de caracteres y palabras como argumento.



La conversión de caracteres se realiza de acuerdo con GOST 7.79-2000 (sistema B) . No se tienen en cuenta reglas especiales para la transliteración de nombres, excepto para la conversión especial de las terminaciones "LE" se traslitera como "IE" y "OY" como "IJ".



A continuación se muestra el código de función completo:



# 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;
}


Aquí tienes un ejemplo de cómo funciona:



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


Salida de



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



El usuario puede corregir la tabla de transliteración para el estándar utilizado por él. Espero que le sea de utilidad a alguien. Ahora puedes estar tranquilo al enviar mensajes en ruso a Telegram, tanto convirtiéndolos a códigos UTF-8 usando mi función de conversión desde aquí como por transliteración.



All Articles