Easyling Release Notes – 2015 November

December 21, 2015 - Zalán Meggyesi

November has come and gone with cold rains, but despite the glum climate, we still managed to add three fairly major features to our offering, as well as a number of miscellaneous fixes, optimizations, and tweaks. The Translation Proxy now has the ability to translate nested JSON-structures, strip the tags from HTML-formatted attributes, and to apply a default exclusion behavior on new pages in a project. See the full details after the jump!

Nested JSON Translation

The Proxy has long had the ability to translate dynamic content arriving from the server as a JavaScript Object Notation-compliant object. We’ve also been capable of translating string-encoded JSON objects for some time. Now, we are combining the two features into one, and we are able to translate stringified JSON. Consider the following:

In the object above, you can see the “data” field contains stringified JSON data – extracting this would mean all the control characters and keys are extracted as well. However, by adding the switch ” json” (note the space!) after the search path, you’re marking it as JSON object to be processed further, and you can then extend that path on the next line to capture the other label as simple text instead of having it riddled with other data. In this case, one would write:

json.batch.data json
json.batch.data.json.batch.label

HTML-formatted HTML Attributes

We’ve been extracting text from certain HTML attributes (image titles, metatags, alternative texts, etc.) ever since time began. For a while now, we’ve been giving our users the power to define which custom attributes should be translated as well. However, this translation was always limited to a plaintext one – if the attribute happened to contain markup itself, that would show up in the extracted content.

Now, we’ve implemented a recursive HTML translator that allows us to even take HTML attribute contents, and pass them through their own HTML parsers, extracting only the meaningful content and stripping away any formatting and other tags that may be contained.

The feature does not yet have its user interface rolled out, but we can help you by enabling it on request.

Default Exclusion Behavior

By default, the Proxy will attempt to translate everything to the best of its knowledge. This includes completely new pages, which are being seen for the first time. Sometimes, this is not desirable, however: it generally results in a partially-translated page with only the menu bars and a few other template components translated, but none of the actual content.

To prevent this, we implemented a switch to prevent this behavior: it’s coupled to turning on Page Freeze, and will treat any page not in its current list as externalized – no entries will be added from it, and nothing on it will be translated.

Use the default externalized feature to prevent automatic translation of content on newly-appearing pages…

We recognized that this may lead to an SEO penalty for duplicated content, so we also added the option of injecting a canonical link header into such pages, to signal crawlerbots that the “real” content is found elsewhere, and any SEO scores should be applied to that page. However, given the complex and individually-variant nature of SEO, we elected not to activate this option by default, handing control to the user instead: you can activate it by toggling the option in the Tweaks section of the Advanced Settings menu.

… and add the Canonical header to instruct the GoogleBot to apply SEO rankings to the original, instead of penalizing for duplicate content.

The Little Things

As part of our miscellaneous upgrades, tweaks, and optimizations, we’ve modified our client-side search algorithm to fetch data faster by not resetting the cursor between searches, and in a bit of a facelift, the “Unsaved changes” alert on the workbench has been given a “Close” button – although in the interest of data safety, even if you do close it, the translations will be saved and the Workbench will only reload after that.