SDL Passolo 2009 to 2018 Migration Guide SDL Passolo 2018

March 2018 SDL Passolo 2009 to 2018 Migration Guide

SDL Passolo 2018

March 2018 ii SDL Passolo 2009 to 2018 Migration Guide A

Legal notice 0 Legal notice

Copyright and trademark information relating to this product release.

Copyright © 2000–2018 SDL Group.

SDL Group means SDL PLC. and its subsidiaries and affiliates. All intellectual property rights contained herein are the sole and exclusive rights of SDL Group. All references to SDL or SDL Group shall mean SDL PLC. and its subsidiaries and affiliates details of which can be obtained upon written request.

All rights reserved. Unless explicitly stated otherwise, all intellectual property rights including those in copyright in the content of this website and documentation are owned by or controlled for these purposes by SDL Group. Except as otherwise expressly permitted hereunder or in accordance with copyright legislation, the content of this site, and/or the documentation may not be copied, reproduced, republished, downloaded, posted, broadcast or transmitted in any way without the express written permission of SDL.

Passolo is a registered trademark of SDL Group. All other trademarks are the property of their respective owners. The names of other companies and products mentioned herein may be the trademarks of their respective owners. Unless stated to the contrary, no association with any other company or product is intended or should be inferred.

This product may include open source or similar third-party software, details of which can be found by clicking the following link: Acknowledgments on page 0 .

Although SDL Group takes all reasonable measures to provide accurate and comprehensive information about the product, this information is provided as-is and all warranties, conditions or other terms concerning the documentation whether express or implied by statute, common law or otherwise (including those relating to satisfactory quality and fitness for purposes) are excluded to the extent permitted by law.

To the maximum extent permitted by law, SDL Group shall not be liable in contract, tort (including negligence or breach of statutory duty) or otherwise for any loss, injury, claim liability or damage of any kind or arising out of, or in connection with, the use or performance of the Software Documentation even if such losses and/or damages were foreseen, foreseeable or known, for: (a) loss of, damage to or corruption of data, (b) economic loss, (c) loss of actual or anticipated profits, (d) loss of business revenue, (e) loss of anticipated savings, (f) loss of business, (g) loss of opportunity, (h) loss of goodwill, or (i) any indirect, special, incidental or consequential loss or damage howsoever caused.

All Third Party Software is licensed "as is." Licensor makes no warranties, express, implied, statutory or otherwise with respect to the Third Party Software, and expressly disclaims all implied warranties of non-infringement, merchantability and fitness for a particular purpose. In no event will Licensor be liable for any damages, including loss of data, lost profits, cost of cover or other special, incidental, consequential, direct, actual, general or indirect damages arising from the use of the Third Party Software or accompanying materials, however caused and on any theory of liability.This limitation will apply even if Licensor has been advised of the possibility of such damage. The parties acknowledge that this is a reasonable allocation of risk.

Information in this documentation, including any URL and other Internet Web site references, is subject to change without notice. Without limiting the rights under copyright, no part of this may be reproduced, stored in or introduced into a retrieval system, or transmitted in any form or by any means (electronic, mechanical, photocopying, recording, or otherwise), or for any purpose, without the express written permission of SDL Group.

4 SDL Passolo 2009 to 2018 Migration Guide Contents

1 Legal notice ...... 3

2 About software localization with SDL Passolo ...... 1

3 Binary or ResX Localization ...... 3

4 Migrating SDL Passolo 2009 to SDL Passolo 2011 and Passolo 2011 to Passolo 2016 ...... 5

Loosing Translations after Update in Project with Resx Files ...... 6

Handling of Menus and Context Menus ...... 6

String Flagged as Un-translated ...... 6

Recovering the Translations ...... 10

5 Migrating from Passolo 2015/Passolo 2016 to Passolo 2018 ...... 9

Deleted strings after Update in Project ...... 10

Recovering the Translations ...... 10

Quick Access Toolbar settings ...... 10

Opening translation bundles with Passolo 2018 ...... 11

Working with translation bundles using Passolo 2018 ...... 11 Working with bundles using Team Edition ...... 12

6 Acknowledgments ...... 13

SDL Passolo 2009 to 2018 Migration Guide v vi SDL Passolo 2009 to 2018 Migration Guide 1

About software localization with SDL Passolo 1 About software localization with SDL Passolo

Localization of .NET software adds a new level of complexity to localization projects. This is a challenge for the localization teams as well as for tool developers who want to offer the best possible support for .NET localization.

Find in this guide what are the changes that affect .NET localization projects in Passolo 2018.

This document describes concepts of .NET localization in general and the challenges for localizers as well as us as tool developers. We also address in this document changes between the old .NET parser and the new one. Some of these changes will impact the localization workflow when migrating from older versions to SDL Passolo 2018.

2 SDL Passolo 2009 to 2018 Migration Guide 2

Binary or ResX Localization 2 Binary or ResX Localization

Passolo supports both the localization of ResX files and the localization of assemblies, but it is always recommended to localize assemblies.

While localizing .resx files containing string tables is not critical, localization of res files containing WinForms can be less safe than using the binary approach. The main reasons are: • Quite often WinForms are part of a larger application and depend through inheritance on other WinForms they are derived from. Binary localization is the only possibility to track down these dependencies. • ResX files contain all data which must be localized but not all structural information needed to render a WinForm. This is true for all but very simple Winform layouts. Again the information is available in the compiled assembly and Passolo can use this information to provide significantly better rendering results in the visual editor.

Both inheritance and lack of structural information makes it impossible for a localization tool to determine the correct layout. Passolo must guess how the data stored in the .resx file should be treated and in the worst case might shows an incorrect layout and might even mix up the layout in the target file.

4 SDL Passolo 2009 to 2018 Migration Guide 3

Migrating SDL Passolo 2009 to SDL Passolo 2011 and Passolo 2011 to Passolo 2016 3 Migrating SDL Passolo 2009 to SDL Passolo 2011 and Passolo 2011 to Passolo 2016

The .NET parser of SDL Passolo 2011 is a complete re-development.The new design reflects what wehave learned about .NET localization over thepast ten years.We tried tominimizethe impact tocustomer moving thenew parser but we also had to make some designdecisionswhich impacts themigration from SDL Passolo 2009 to SDL Passolo 2011. Loosing Translations after Update in Project with Resx Files

The disadvantage was that every time the file was renamed, the translation got lost and moved to the Recycle Bin folder because the resource id changed. Because a string table based on a resx file can contain only one Winform or string table we decided to use the static name SingleResourceFile always. This change now leads to a loss of translations because the resource id will be changed. The advantage is that further changes of the resx file name do not impact the string list content anymore.

The old .NET parser was not always able to associate strings to controls. Mainly strings related to base forms and string used to initialize list boxes or similar controls have been affected. Those strings have been externalized in a string table resource. It also happened that strings ended up being stored both in the Winform resource and the string table resource unfortunately. In the new parser such dangling strings are added to the Winform resource always, so that there will be no string table data anymore. The strings of the string table along with the translations will be moved to Recycle Bin. Handling of Menus and Context Menus

SDL Passolo 2009 did not support sub resources which allows for example to locate menus below the Winform resource.

With the introduction of sub resources in SDL Passolo 2011 we decided to move menus of Winforms from the global menu resources to sub resources of the Winform resources. This leads to a loss of translations which are kept in Recycle Bin and new strings in the sub resources. String Flagged as Un-translated

In SDL Passolo 2009 strings of controls containing newlines have been stored in the native format which is \r\n.

Passolo internally only used \n to encode a newline. To simplify editing those strings, they are now converted to Passolo internal format when parsing and back to the native when generating the target file. When updating a string list with newlines after migration, the internal representation of such string has changed and they are marked as un-translated. It is recommended to verify the translations and remove the unnecessary \r escape sequences.

6 SDL Passolo 2009 to 2018 Migration Guide Migrating SDL Passolo 2009 to SDL Passolo 2011 and Passolo 2011 to Passolo 2016 3

Recovering the Translations

SDL Passolo offers two functions to recover translations that might get lost during the migration.

You can use the leverage function to re-assign translations from a copy of the project. When a project is migrated, Passolo stores the original project with the extension .bak. You can rename and use this project to leverage lost translations. Passolo can read from this project even if it is not migrated.

For Get data from strings with same only check string ID, resources type and source string, because the parent or resource id might have changed during migration and update of the project. Still these settings provide safer matches as not just the source string but also the string ID is taken into account.

It could be useful to run the leverage function two more time with the just string ID and source string and finally with just source string. This widens up the potential source for translations for those strings which have not been recovered.

The second option to recover translations is to use Pre Translation. In this case translations are assigned only text based. ID information is not taken into account. To limit the potential matches only the current string list should be enabled as a translation provider as displayed in the following screenshot.

Still it can happen that for a source string there might more than translation in Recycle Bin. To avoid assignment of a wrong match the following setting can help for If multiple translations are found:

SDL Passolo 2009 to 2018 Migration Guide 7 3 Migrating SDL Passolo 2009 to SDL Passolo 2011 and Passolo 2011 to Passolo 2016

8 SDL Passolo 2009 to 2018 Migration Guide 4

Migrating from Passolo 2015/ Passolo 2016 to Passolo 2018 4 Migrating from Passolo 2015/Passolo 2016 to Passolo 2018

We try to minimize the impact to customer moving to newer versions of the .NET parser. Deleted strings after Update in Project

The resources having duplicate x:uids are now excluded from translation, when such duplicate x:uid is encountered at create/update source strings, a warning message will appear (containing uid and resource baml file).

Even if a parent have duplicate uids, the children with correct uids are imported.

For existing projects a update for source and target is required - in order to remove duplicates from translation. Recovering the Translations

SDL Passolo offers two functions to recover translations that might get lost during the migration.

You can use the leverage function to re-assign translations from a copy of the project. When a project is migrated, Passolo stores the original project with the extension .bak. You can rename and use this project to leverage lost translations. Passolo can read from this project even if it is not migrated.

For Get data from strings with same only check string ID, resources type and source string, because the parent or resource id might have changed during migration and update of the project. Still these settings provide safer matches as not just the source string but also the string ID is taken into account.

It could be useful to run the leverage function two more time with the just string ID and source string and finally with just source string. This widens up the potential source for translations for those strings which have not been recovered.

The second option to recover translations is to use Pre Translation. In this case translations are assigned only text based. ID information is not taken into account. To limit the potential matches only the current string list should be enabled as a translation provider as displayed in the following screenshot.

Still it can happen that for a source string there might more than translation in Recycle Bin. To avoid assignment of a wrong match the following setting can help for If multiple translations are found: Quick Access Toolbar settings

The customizations done to the Quick Access Toolbar settings in SDL Passolo 2016 are kept when installing SDL Passolo 2018.

If you have a SDL Passolo 2016 installation and you install Passolo 2018 side-by-side, or even remove SDL Passolo 2016 prior to installing Passolo 2018, there is no need to redefine Quick Access Toolbar settings, as these are transferred over.

10 SDL Passolo 2009 to 2018 Migration Guide Migrating from Passolo 2015/Passolo 2016 to Passolo 2018 4

Opening translation bundles with Passolo 2018

In SDL Passolo 2018 can open and convert projects created in Passolo 2011/2015/2016.

Note: Projects created in Passolo 2018 cannot be opened in Passolo 2011/2015/2016.

When a project created with older Passolo versions (2011/2015/2016) is opened in Passolo 2018 a conversion message will appear. In the Open Project dialog you can choose whether you want to convert it or open it in read-only mode.

After converting a project in Passolo 2018 a .bak file will be created in the project folder.

.tbu and .tbulic bundles created with older versions of Passolo Collaboration can be opened in Passolo 2018 Collaboration in read-only mode. The .tbulic bundles can also be opened in Passolo 2018 Translator in read-only mode. Working with translation bundles using Passolo 2018

About this task Translator Edition cannot upgrade tbulic16 into tbulic18 files. In order to this, you need to follow the next steps:

Procedure 1. Synchronize Exports with Translator Edition 2016, then stop working on the bundle. 2. Download and install Translator Edition 2018. 3. Using Passolo 2016 the project managers have to select Export Manager to open the project. Select Read translations for all exported bundle and then choose Un-Export function for all exported bundles. 4. Passolo 2018 is now started and the project is loaded with 2018 and converted. 5. The FTP Settings have to be changed, at least the FTP directory must be changed so that the new files will be stored in a different folder. 6. All bundles must be exported again and uploaded to the FTP. 7. New invitation emails will be exported and sent to all translators. 8. Open the attached .pslscript file with the Translator Edition 2018.

SDL Passolo 2009 to 2018 Migration Guide 11 4 Migrating from Passolo 2015/Passolo 2016 to Passolo 2018

Results The new converted bundle can now be downloaded.

Working with bundles using Team Edition

Procedure 1. Download and install Translator Edition 2018. 2. Using Passolo 2016 project managers have to import all bundles into the main project. 3. If during the bundle import the Release string lists option was not set, the project manager has to choose Un-Export function for all exported bundles. 4. Passolo 2018 is now started and the project is loaded with 2018 and converted. 5. All bundles must be exported again as .tbulic18 files. 6. Bundle files must be send via email to all translators.

Results The new bundle can now be opened.

12 SDL Passolo 2009 to 2018 Migration Guide 5

Acknowledgments 5 Acknowledgments

SDL Passolo includes open source or similar third-party software. Apache log4net The Apache log4net library is a tool to help the programmer output log statements to a variety of output targets. log4net is a port of the Apache log4j™ framework to the Microsoft® .NET runtime. ARC Welder The App Runtime for Chrome (Beta), or ARC, lets you run your favorite Android apps on Chrome OS. BCGControlBar Pro for MFC BCGControlBar ("Business Components Gallery ControlBar") is an MFC extension library that allows you to create Microsoft Office 2000/XP/2003/2007/2010/2013 and -like applications with full customization options. Chilkat .NET SSH / SFTP Component The SSH / SFTP .NET component provides two objects: A client-side SSH2 implementation for executing commands and shell sessions on Unix/Windows SSH servers, and an SFTP implementation for file transfer and remote file management over SSH. C++ Builder C++Builder gives you fast, powerful, modern C++; one compiler, one debugger, one IDE, four platforms; amazing frameworks; and lets you speed up your development, focus on your code and bring your app to market faster than any other C++ toolchain. CSizingControlBar CSizingControlBar is an easy to use collection of classes, allowing you to focus on your application needs rather than on implementation tweaks. DotNetZip DotNetZip is a class library and toolset for manipulating zip files. Use VB, C# or any .NET language to easily create, extract, or update zip files. Google Translation API Google Translate API provides a simple programmatic interface for translating an arbitrary string into any supported language. jarsigner Signs and verifies Java Archive (JAR) files. Json.NET Json.NET is a popular high-performance JSON framework for .NET. Mono.Cecil Cecil enables you to load existing managed assemblies, browse all the contained types, modify them on the fly and save back to the disk the modified assembly. Newtonsoft.Json Json.NET is a popular high-performance JSON framework for .NET. Polar SpellChecker Polar SpellChecker for .NET enables you to implement wide range of spell checking features in your application using a .NET interface. SafeNet Sentinel SafeNet's Sentinel software licensing products and software protection solutions provides software publishers control and visibility into how their applications are deployed and used.

14 SDL Passolo 2009 to 2018 Migration Guide Acknowledgments 5

SQLite SQLite is an in-process library that implements a self-contained, serverless, zero-configuration, transactional SQL database engine. WinWrap Basic WinWrap® Basic is a .NET/WPF/COM component which is an alternative to ActiveX, VBScript, VB6, VBA, Sax Basic and VSTA scripting. WinWrap provides advanced end-user scripting and automation. XCEED .NET FTP library XCEED offers efficient FTP and FTPS (FTP over SSL) file transfer to .NET or ASP.NET apps. ZipArchive library C++ library that adds ZIP compression functionality to software. zlib zlib is a software library used for data compression. zlib was written by Jean-loup Gailly and Mark Adler and is an abstraction of the DEFLATE compression algorithm used in their gzip file compression program.

SDL Passolo 2009 to 2018 Migration Guide 15 5 Acknowledgments

16 SDL Passolo 2009 to 2018 Migration Guide SDL (LSE:SDL) is the global innovator in language translation technology, services and content management. With more than 25 years of experience, SDL delivers transformative business results by enabling powerfully nuanced digital experiences with customers around the world.

Are you in the know? Find out why the top global brands use SDL at sdl.com and follow us on Twitter, LinkedIn and Facebook.

Copyright © 2018 SDL plc. All Rights Reserved. The SDL name and logo, and SDL product and service names are trademarks of SDL plc and/or its subsidiaries, some of which may be registered. Other company, product or service names are the property of their respective holders.

SDL_td_Passolo_2018_EN_A4