In case the strings you are referring to are simple names I guess their length is relatively small and therefore performance is not a issue.
Using the code below you can encode-decode any utf8 string to and from English letters.
object LetterConverter {
private def toTwoLetters(byte: Byte): String = {
val num = byte + 128;
//range now from 0 to 255
val division = num / 26;
val modulo = num % 26;
val firstletter = ('a' + division).toChar.toString;
val secondletter = ('a' + modulo).toChar.toString;
firstletter + secondletter;
}
val byteRange = (-128 to 127).map(_.toByte);
val letters = byteRange.map(n => toTwoLetters(n));
private val byteToLetters = byteRange.zip(letters).toMap;
require(byteToLetters.size == 256, "size really is: " + byteToLetters.size);
private val lettersToByte = byteToLetters.map(_.swap);
require(lettersToByte.size == 256, "size really is: " + lettersToByte.size);
def bytesToLetters(bytes: Seq[Byte]): String = {
bytes.map(byte => byteToLetters(byte)).mkString;
}
def lettersToBytes(letters: String): Seq[Byte] = {
letters.sliding(2, 2).map(twoLetters => lettersToByte(twoLetters)).toSeq;
}
def encode(str: String, charset: Charset = Codec.UTF8): String = {
bytesToLetters(str.getBytes(charset));
}
def decode(letters: String, charset: Charset = Codec.UTF8): String = {
new String(lettersToBytes(letters).toArray, charset);
}
}
Therefore let's say you have the prefix: com.pligor.service
Therefore having a non english name name let's say: Γιώργος
this would be translated to something like that: fmaiefoiafmaiofa
And you may just append that to get: com.pligor.service.fmaiefoiafmaiofa
After receiving the name on the client part you may extract the postfix fmaiefoiafmaiofa
and by decoding it you get back the original greek name Γιώργος
Enjoy!