Easyling Release Notes - 2015 May

Jun 29, 2015 - Easyling.com

The weather is starting to heat up in Budapest, and with it, our development cycles are accelerating a bit as well. We’ve implemented a new filtering indicator, the ability to process doubly-encoded JSONs, we’ve brought back the ability to use Swap Entries, the ability to append custom headers to our responses, a new indication of fully-translated pages, and easy integration with Google’s Universal Analytics. See the full inventory after the jump!

Filtering Indicator

Maybe our most visible feature this month is the filter indicator on the Workbench. Simply put, if you modify the filter settings from the default, we’ll display a highly visible notification on the toolbar, so if you can’t find something, you’ll have an idea why that is. Also, clicking the indicator provides a quick way of setting the filters back  to their default settings.

[caption id=“attachment_2299” align=“aligncenter” width=“1280”]Filter indicator The highly visible filter indicator alerts you to modified filter settings, meaning that some entries may be hidden from view.[/caption]

Fully-Translated Pages

Also on the topic of indicators, fully-translated pages now show up as blue in the pages list, instead of the regular green. Thus, you can now instantly determine which pages are fully translated, and which ones have a few untranslated segments.

[caption id=“attachment_2298” align=“aligncenter” width=“1282”]100 Percent Fully-translated pages now have a new color, so that you can immediately see which ones are completely done.[/caption]

JSON-encoded-JSON detection

A new tweak implemented in May is the ability to decode and process doubly-encoded JSON data. To make this clear, a small primer on the JavaScript Object Notation format: in a nutshell, it allows very easy-to-implement communication between the server and the browser by passing what essentially amounts to specifically formatted strings back and forth. These strings are always enclosed in square brackets ([…]) or curly braces ({…}), and have key-value pairs as data, where each value may contain further objects, nesting into infinity. For instance:

{
 "ResponseCode": "BadRequest",
 "Message": "Invalid/Unauthorized request",
 "Status": "FAIL"
}

Some server infrastructures, however, encode these structures themselves as strings, enclosing them in the obligatory quotes and replacing inner quotes with their “escaped” versions ("), which creates an invalid syntax that our parser previously failed upon. Now, however, after activating this tweak, we will first try to unescape these strings and transform them back into valid JSON data after which we’ll be able to process it as regular JSON data and translate its contents (given the appropriate search paths, see the release notes here).

[caption id=“attachment_2296” align=“aligncenter” width=“1282”]Json Escaped We can now parse technically-invalid JSON data as well, should your client’s server require us to.[/caption]

Swap Entries on the Workbench

Back in last February, we implemented Swap Entries, specially marked entries which allow replacement of the raw HTML content. This feature was temporarily masked after the rollout of the Workbench (meaning it was still available from an XLIFF export, but they weren’t displayed in the Pages List). Now, the appropriate selectors have been re-implemented, so once again, the Swap Entries can be selected and displayed.

[caption id=“attachment_2294” align=“aligncenter” width=“1278”]Swap Entries Swap entries can now once again be filtered for on the Workbench, and their content edited directly.[/caption]

Local Response Headers

We’ve had the ability to append custom headers to the remote requests for some time. Now, we’ve implemented the inverse as well: adding custom headers to the local responses, that is, the responses we send to the browser. This is particularly useful if your site is experiencing slowdowns, just append “Pragma:public” and “Cache-Control:public, max-age=[seconds]” to enable the client browser to cache the responses, and pull them from its own cache faster. Of course, this should only be used if your site doesn’t have dynamic and/or private content, which may be skewed by being cached.

[caption id=“attachment_2297” align=“aligncenter” width=“1282”]Local Headers Custom headers can now be appended to local responses, so you can instruct browsers to cache your content, should you need to.[/caption]

Universal Analytics

We have also integrated the Google Universal Analytics API, enabling us to send traffic data directly to Analytics, making it easier to track the requests the proxy is serving. To enable, all you need to do is set the Universal Analytics codes in the Project Statistics and watch as the data starts rolling in. Important: it can show significantly different numbers compared to standard Analytics report embedded to the page. While the embedded one tracks user page visits from their browser, our server-side implementation tracks all the requests (including CSS, JavaScript, fonts, HTML pages). It’s intended to track your charges, and to help optimizing the original site. It will NOT contain requests cached by the EdgeCache, as we don’t charge for that at all.

[caption id=“attachment_2321” align=“aligncenter” width=“944”]UniversalAnalytics We can now push data live to Google’s Universal Analytics, giving you a much clearer picture of your site’s impact.[/caption]

Concordance Search on the Workbench

Finally, the Concordance Search was implemented on the Workbench as well. You may remember the forerunner from our Christmas gift last year, when it was implemented on the Translation Memories screen. Now, we implemented it on the Workbench as well, so you don’t have to switch contexts to look up a particular phrase in the translation memories assigned to the project.

[caption id=“attachment_2293” align=“aligncenter” width=“1282”]CONCORDance search The Concordance Search has been implemented on the Workbench as well, sparing you a change of context whenever you want/need to look something up in your translation memories.[/caption]