Roku Developer Program

Join our online forum to talk to Roku developers and fellow channel creators. Ask questions, share tips with the community, and find helpful resources.
cancel
Showing results for 
Show  only  | Search instead for 
Did you mean: 
rrobinson
Visitor

Adding Translations <solved>

I was wanting to add translations through an http request returning xml.
I have the bright script code working and the backend server code written.
I'm using a mysql database with utf8_general_ci encoding.

On some translations, the simple ones, french, spanish etc. (haven't even tried chinese yet ) If I hardcode the translation
in the bright script it displays properly. But if I try sending it through the xml the parser ( xml.Parse )
fails.

1. Translation is coming out of database in utf8 format
2. I've tried converting to utf8 coming out of the database, this
lets the parser work but the chars are wrong, of course.
3. I've tried decoding the utf8 coming out of the database and
the parser works but again, of course again, the chars are wrong

Note: I tried 2 and 3 just in case bright script was doing some conversion with the text

4. I've tried with and without a CDATA wrapper
5. I've read through the documentation and found nothing useful.
Kinda feel like I'm programming Basic again.
I was going to try to serialize or json encode the transfer but
nothing short of writing a decoder would let me test this and I'm
still not sure it would work. ( unless I missed something in the docs )
I still may try it though.
6. I'm using a utf8 header in the xml
7. I've tried looping through the string and converting it to char codes

Was wondering if anyone here had any suggestions or knowledge that this won't work
before I go further.

I just designed and coded an app translated to 13 languages, thought I had
a pretty good handle on it 😉

I'm hoping to learn something new today!
0 Kudos
7 REPLIES 7
rrobinson
Visitor

Re: Adding Translations

Just in case anyone wanted a sample of xml that fails parsing for me.
This is a google translate so please excuse my spanish 😉

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<translations>
<translation>
<from><![CDATA[This player is already registered]]></from>
<to><![CDATA[Este reproductor ya está registrado]]></to>
</translation>
<translation>
<from><![CDATA[Registered to]]></from>
<to><![CDATA[Registrado a]]></to>
</translation>
<translation>
<from><![CDATA[Player can only be registered to one account at a time]]></from>
<to><![CDATA[El jugador solo puede ser registrado para una cuenta a la vez]]></to>
</translation>
<translation>
<from><![CDATA[If you would like to connect it to another account it has to be removed from the above account first]]></from>
<to><![CDATA[Si desea que la una a otra cuenta que tiene que ser removido de la cuenta por encima de primera está]]></to>
</translation>
<translation>
<from><![CDATA[Select 'ok' to exit this screen.]]></from>
<to><![CDATA[Seleccione "Aceptar" para salir de esta pantalla.]]></to>
</translation>
</translations>
0 Kudos
rrobinson
Visitor

Re: Adding Translations <solved>

Just in case anyone comes across this.
I converted the string to it's ord numbers, ';' seperated, before packaging in the xml

for example in php

$ord_string = "";
for( $i = 0; $i < strlen( $translation['t_translated'] ); $i++ ) {
$ord_string .= ord( $translation['t_translated'][$i] ) . ";";
}


gave me something like this:
101;99;99;105;111;110;101;32;34;65;99;101;112;116;97; (and on, and on, and on)

then i wrote a britescript function to convert it back to a string
I kept searching for a strtok function, oh well...

Function convertOrdToChar( in_string as String ) as String
' create a copy to work with
tmp_string = in_string
out_string = ""
while true
if tmp_string = "" then
return out_string
endif
cutoff = instr( 1, tmp_string, ";" )
print "cutoff: " + itostr( cutoff )
ord = val( left( tmp_string, cutoff ) )
print "ord: " + itostr( ord )
out_string = out_string + chr( ord )
print "out_string: " + out_string
tmp_string = mid( tmp_string, cutoff + 1 )
print "tmp_string: " + tmp_string
end while

End Function


Any one want to take a shot at making that function cleaner, be my guest
Be interesting to see what others come up with.
0 Kudos
RokuKevin
Visitor

Re: Adding Translations <solved>

We have not added unicode (utf-8 or utf-16) support to BrightScript yet... There may be a few places where BrightScript assumes utf-8 (like in the manifest file), but the parser is not one of them.

Displaying multi-byte characters like chinese in BrightScript strings is not possible on the Roku box at this time.

--Kevin
0 Kudos
rrobinson
Visitor

Re: Adding Translations <solved>

Thanks for the fast reply!
Saved me a ton of time on testing.
0 Kudos
rcelestino
Visitor

Re: Adding Translations <solved>

"RokuKevin" wrote:
We have not added unicode (utf-8 or utf-16) support to BrightScript yet... There may be a few places where BrightScript assumes utf-8 (like in the manifest file), but the parser is not one of them.

Displaying multi-byte characters like chinese in BrightScript strings is not possible on the Roku box at this time.

--Kevin


Hi, i had recently posted a question about charsets, and rrobinson replied to me about this post.Then i read this post, and Kevin:
-Where is utf-8 supported?
-When you say "parser", told about BrightScript parser or roXMLElement Parser? because when i am using a string with tilde's for example "hélló fróm árgéñtina" this is working correctly, but when i am reading from an XML (inside the standalone package zip or remotely got from a request to a REST api [encoded in UTF-8]) it doesnt work in ifParagraphScreen.AddHeaderText but work OK if i use in a content list for example ifPosterScreen setContentList.

Thanks and regards.

roberto.
0 Kudos
jlfreund
Visitor

Re: Adding Translations <solved>

"RokuKevin" wrote:
We have not added unicode (utf-8 or utf-16) support to BrightScript yet... There may be a few places where BrightScript assumes utf-8 (like in the manifest file), but the parser is not one of them.

Displaying multi-byte characters like chinese in BrightScript strings is not possible on the Roku box at this time.

--Kevin


It sounds like it's only possible to use single byte languages with Brightscript, which limits to EFIGS -- is that correct? If so, does the default font have glyphs for all the accented characters up to U+00FF (y with 2 dots)?

I'm wondering if you know if any parts of Brightscript support multibyte now (ie XML parsing, Brightscript string handling, DrawText, etc)? Or do you know if there are any plans to fully support multi-byte in the future? If not, I guess the only way to do it would be to do something like what rrobinson suggested which is to pre-convert UTF-8 to some kind of intermediate format, then when it comes time to render the string, you can compute the position and render one character at a time.

Thanks
0 Kudos
destruk
Streaming Star

Re: Adding Translations <solved>

and this thread is only 3 years old, yippee.
0 Kudos
Need Assistance?
Welcome to the Roku Community! Feel free to search our Community for answers or post your question to get help.

Become a Roku Streaming Expert!

Share your expertise, help fellow streamers, and unlock exclusive rewards as part of the Roku Community. Learn more.