Here's something else.

Search posts
Forum index


Orinoco -

Here's something else.

One of the major features of a certain former popular juggling portal was of course it's multilingualness.

So in homage to Juggling Universe I proudly present the traduzione Italiana!1

At present the languages available for translation are: - German - Spanish - French - Italian - Dutch - Russian (3 plural forms, really?!)

Other languages will be made available on request.

At the bottom of each page you will find a 'translate this page' link that takes you to a form where you can enter translated text & access the audit history of previous changes so if someone makes a mistake they can access previous translations to correct it. Anyone with an account can contribute a translation.

I have purposefully not included any indications of translation 'progress'. The Edge is huge. Most of it doesn't need translating for the site to be usable. I have no desire to put pressure on anyone to put hours of unnecessary work in for some arbitrary notion of completeness. The only gamification I want to encourage involves dice, cards & meeple.

The tranlsation index shows all pages available for translation & also contains links to edit texts that are stored in a database rather than part of a page. These texts are the strings used in the spangly new records system, email templates & latest content templates that appear in the latest content feed on the homepage.

Some translatable texts will include variables, these will look $SomethingLikeThis in the original text (clicking the variable will insert the variable text at the cursor in the input field). The variable will be replaced with specific information when the page is rendered.

For example the following:

New post by $UserName

Will be converted to something like:

New post by Orinoco

Variables are case sensitive

Texts will also contain links. Available links will be described in blue underneath the input field. To specify what part of the text you want to be clickable surround it with the link's corresponding numerical tags. If you select text in the input field then click the desired link the system will automatically insert the tags for you.

For example the following:

New <1>post</1> by <2>$UserName</2>

Will be converted to something like:

New post by Orinoco

The whole thing is very complicated. Some of you have already noticed that I've been breaking lots of things recently, all of them were to do with this! I'm sure there will be more problems. I will fix them as soon as I can.

Boring nerdy stuff: I've written my own translation system that basically maintains multiple versions of the same dynamic site, one for each language. I've done this instead of using GNU gettext for several reasons:

  • Gettext only works on php files, it can't handle static text, javascript or html files unless you decrease performance by using php to write those files dynamically.
  • I'd have to rewrite all the php code to include the gettext functions. My system works independently of the files being translated & allows me to continue to write plain readable (to me at least!) code.
  • Using gettext the server has to load the php, load the language file & parse them together on each page request. In my system we only need to load & parse the php, the grunt work for getting the right text in the right place is done only once at the point you save a new translation. The non-English pages will always be as fast as the English pages.
  • Not specific to my translation system but using subdomains for language information means I can provide a multilingual site without needing to use cookies to store language preferences for logged out users or slowing down everything by including &Language=Klingon in every URL.


1 I've been working on this for 5 months just to get that punchline in.

The Void - - Parent

That must have been a lot of work. Well done, and thanks.
Now, can anyone translate "tranlsation" for me? :-P

7b_wizard - - Parent

Great! That is awesome, I like when it's international.

5balls - - Parent

Great! I suppose you decided consciously against it and know about it, but just in case you are not aware: There is also the possibility to do language negotiation without using subdomains, GET/POST variables or cookies:

I use this for our juggling club webpage (although I want to add a link to the other translations at the bottom of the page in case people have not set up their browser properly):

(Start page should appear in english for most people here, in case you have your browser set up to prefer german language webpages it will show it in german - typically this is set correctly in case your operating system is set up in german - you can play around changing browser settings and reloading the page)

Orinoco - - Parent

I was not aware of that Apache feature. Thank you for the tip. Reading through the documentation though I think I still prefer using separate sub domains. I prefer the transparency of showing the language right at the start of the url rather than picking a language from a setting hidden in the browser which I think a lot of people would not be aware of, especially if they using someone else's device.

Julien_H - - Parent

I've started to work on the french translation! Let me know if i'm breaking everything or actually doing useful work!

Orinoco - - Parent

That is wonderfully useful thank you!

Daniel Simu - - Parent

I've done 2 pages, I doubt any Dutch person will ever care, but it's fast and easy to do so I don't mind to translate a few more...
Now I've started at the top which is probably not the most effective, could you give a list of what you think are the 5 or 10 most important pages of the site?

Orinoco - - Parent

Thank you! & glad to hear it is easy to use.

I've always considered getting people to juggling festivals to be the most important thing so personally I think the most important pages to translate are:

libdb.php - a library that is used on every page, includes the primary navigation menu
libdir.php - a library that is used across all directory section pages (events, clubs, groups)

The order of popularity of all the sections on the Edge are pretty consistently:

forum - but given that pretty much all posts are currently in English (this does not have to be the case!1) I don't see there is much reward from translating this section.

1 I think this is the closest we've come to a multilingual thread but I'm not sure it really counts.

Daniel Simu - - Parent

The top menu on is now broken, probably happened after I changed the text..

Orinoco - - Parent

Now fixed, I just added the <1>numerical link tags</1> around the text that needed it.

Daniel Simu - - Parent

Right, I didn't read the instructions carefully enough to remember that I had to put those tags around. Maybe as a fix all, put the link automatically around all text if there is no link specified? Or put a one line reminder that the tags go around the links on every translation line?.. hmm....

Ilia Poliakov - - Parent

I translate some pages.
I hope, it will help for russian jugglers.
if they will open site, it will be automatically in russian?

For me it is very unuseful when after "Save Changes" this page close and it goes to list of pages.
And also it would be great to see pages that are translated and sort texts on one page that don't have any translation.
Also I don't understand this system with links. Mostly whole text is a link or not a link. And you can do it automatically.

Orinoco - - Parent

Thank you very much for the translations. If visitors open the Russin site ( they will see your translations.

I've just changed the system so that you are redirected to the page you have just translated, & for texts where there is only link & you haven't specified a portion of the text to be clickable it will now automatically add the tags around the whole text for you.

Ilia Poliakov - - Parent

Nice! You are really fast

Ilia Poliakov - - Parent

Please, ix this problem: - after I did translation it shows wrong. - I can't translate words Organiser and Attendie

Orinoco - - Parent

Oops, events page now fixed.

Those translatable words are in one of the linked files, specifically libDir.php. At the top of the edit translation page there are links to translate all other files that that page depends on.

Ilia Poliakov - - Parent
have some problem with space between words. Please, write all things like "reply" and "bookmark" separately and put punctuation marks "-" automatically.
Also I don't see where to translate this:
Previous unread
-Next unread
-Mark thread as read

Orinoco - - Parent

I've added the missing spaces in for now. I will see if I can work out a way for the system to do that automatically.

That unread text can be translated here. I've just realised the source javascript files that contain the text won't appear in the list of linked files because I use an automated routine to create composite files from the source files depending on the user's selected options. It will take me a while to work out how to fix that.

Ilia Poliakov - - Parent

Something going wrong in translated site.
Don't open pages like Clubs and Profile.
Don't show some info on Main Page, can't add new record.

Orinoco - - Parent

Should all be fixed now. Sorry for the inconveniences.

York Jugglers - - Parent

This is amazing, thank you for all the work you have put into this.

We were looking at the German translation (we are hoping to establish links with the juggling club in our city's twin town) specifically

We noticed there seems to be something amiss with the location of the club in the translation, because in English JugglingEdge, we have:
JuggleSoc - 1.1 miles
Hullabaloo - 28.8 miles
Teapots - 45.6 miles
Lincoln Juggling Society - 57.5 miles

but in German JugglingEdge, we have:
Nottingham Juggling Club - 10,4 miles
FEVER - 20 miles
Leicester Jugglers - 26,3 miles
Lincoln Juggling Society - 28,8 miles
Teapots - 36,9 miles

Which, by triangulation, places us halfway between Nottingham and Newark.

Ii also might be useful for non-British (excluding their colonies) to have the distances in kilometres as well as miles eg: "JuggleSoc - 1.1 miles (1.8km)", (putting both for every language is presumably easier than having to workout which unit of measurement each language might use (and some languages might use both).

Ilia Poliakov - - Parent

Russia uses only metric system, thanks if you will make it

York Jugglers - - Parent

Oh, and the links:
"Liste von Jongliervereinen > UK‎" ("Juggling club listings > UK‎")
"Importieren via iCalendar: Nur dieses Treffen oder Nächste 10 Treffen" ("Import via iCalendar: This meeting only or Next 10 meetings")
"Fügen Sie Daten hinzu an denen der Verein sich nicht trifft" ("Add dates when this club will not be meeting")
"Verschiebe Kartenmarkierung" ("Reposition map pin")

don't seem to work yet on the German translation page of our listing

and the location link

"St Lawrence Church Hall, Lawrence Street, York, YO10 3WP, UK." which on the original English languge version goes to,-1.068456&z=17&t=m
in the German translation goes to,-1&z=17&t=m - so it looks like the problem might be the translation is rounding the latitude and longitude down to the nearest whole number.(this might be why the nearest clubs is also wrong in German)

5balls - - Parent

Oh, sorry, I screwed the links up in the german translation. It seems Orinoco fixed those now?

Orinoco - - Parent

I wouldn't say screwed! I put the links back in last night. Going forward the automatic linking suggested by Illia will mean this isn't an issue. I partially fixed the coordinates problem too which was related to a difference in what PHP thinks is a number & what MySQL thinks is a number.


Subscribe to this forum via RSS
1 article per branch
1 article per post

Forum stats