Differences
This shows you the differences between the selected revisions of the page.
translation_admin 2005-04-29 | translation_admin 2022-05-02 (current) | ||
Line 1: | Line 1: | ||
- | ====== WinSCP Translation How to ====== | + | ====== WinSCP Translation How To ====== |
- | ===== How to Start with Translation? ===== | + | ===== Translating the Application ===== |
- | When you want to start with translation, [[&url(contactme)|contact me]]. Send me your name, contact email address and language you want to work on. Also specify, whether you want your email address to be published on translations page. Optionally I may display your URL instead of an email. Note that I can provide your email address to other translators of the same language (if any) without explicitly asking. In case your language does not use western Latin-1 character set (1252), write me also Windows (not ISO) code of the set. | + | When you want to start translating WinSCP, please [[&forum/viewforum.php?f=9|contact us on the Translation forum]]. Before posting, [[this>../../forum/profile.php?mode=register|register on the forum]], using an email address you want us to use to communicate with you. Post to the topic of the language you want to work on (start a new topic, if your language is not listed yet). Do not forget to post your full name. Thanks! |
- | Note that support for multi-byte character sets is limited (Japanese, Chinese). It needs to be verified for each and every language. Support for bi-directional languages (Hebrew, Arabic) is tested. | + | If we need a help with the translation, we will create a [[this>../transladmin.php|translator account]] for you. Your username is always your e-mail address. |
- | In case I need your help (the language is either not being translated at all or there is still lot of work to do on it or the translation is abanoned and I need maintainer for it), I'll create a [[this>../transladmin.php|translator account]] for you. An username is always your e-mail address. | + | Note that we may provide your email address to other translators of the same language (if any) without explicitly asking you. |
- | ===== How to Translate? ===== | + | ==== Translation File ==== |
- | Once you have a translator account, you may login to translation web-interface. There select your language. Before you will be also to download INI file with strings to translate, you may need to press //Update// button. If the INI file for the language does not exists yet, it will be created. If it already exists, it will get updated, in case it does not contain all strings from the most recent version yet. This can happen if the last translator abanoned the translation while ago. You may need to press //Update// button also with every new release. | + | Once you have a translator account, you may log in to the [[this>../transladmin.php|translation web-interface]]. Once there, download a file with the strings to translate. |
- | Format of the file is like INI file, example: | + | A format of the file is like an INI file, for example: |
- | <code> | + | <code ini> |
- | ; file comment | + | ; File comment |
- | [file] | + | [File] |
- | ; "original english string" | + | ; "Original English string" |
- | key="translated string" | + | Key="Translated string" |
- | ; "original english string2" | + | ; "Original English string 2" |
- | key2="translated string2" | + | Key2="Translated string 2" |
</code> | </code> | ||
- | Where file is either form (dialog) definition (''.dfm'' extension), resource strings file (''.rc'' extension) or strings for [[installation|setup application]] (''.isl'' extension). Key should give you some idea about purpose of the string. For form definitions it is context and the name of component using the string. The strings that need to be translated have keyword ''<translate>'' in place of "translated string" (initially all strings). | + | Where the ''File'' is either a form/window/dialog definition (a ''.dfm'' extension), a resource strings file (a ''.rc'' extension) or strings for [[ui_installer|setup application]] (a ''.isl'' extension). The key should give you some idea about the purpose of the string. For form definitions, it is a context and the name of the component using the string. |
Example: | Example: | ||
- | <code> | + | <code ini> |
- | [Login.dfm] | + | [SiteAdvanced.dfm] |
- | MainPanel.PageControl.ScpSheet.ShellGroup.Caption="Shell" | + | MainPanel.PageControl.ScpSheet.ShellGroup.<nohilite>Caption</nohilite>="Shell" |
</code> | </code> | ||
- | The "Shell" is title (caption) of shell group box on //[[ui_login_scp|SCP tab]]// of Login dialog. | + | The //"Shell"// is the title (caption) of the "shell" group box on //[[ui_login_scp|SCP/Shell page]]// of Advanced Site Settings dialog. |
- | There are two special sections. ''[default.isl]'' contains general strings for setup application ([[&url(innosetup)|Inno Setup]]). The application is already translated to [[&url(innosetuptransl)|several languages]]. If your language is among them, I'll copy the translation to this section. Please check for typos and other mistakes in the section. | + | The strings that need to be translated are marked with ''<translate>'' keyword in place of "Translated string" (initially all strings are marked this way). |
- | ''[Obsolete strings]'' section contains translated strings that are no longer used in the latest version of application. Also when I need to significantly change original english string, I try to change the string key as well, if possible. In this case your translation will move to [Obsolete strings] with next update. This forces you to update the string translation. You may reuse original translation from obsolete section, if appropriate. Then you may safely remove whole section. | + | Use UTF-8 encoding when editing the INI file. |
- | Some strings contain parameter placeholders like ''%s'' or ''%d''. These are replaced by actual value on run-time. Make sure that you keep the same order as in english string. I know it can be sometime difficult, because some languages have different word-ordering, but it have to be so. Also translated string should have approximately same length as original string. This applies mainly for strings that appear on dialogs. The error messages etc, might be usually as long as necessary. | + | You do not have to translate all the strings at once. You may translate them in any number of steps. Upload, what you have done so far, to [[this>../transladmin.php|translation web-interface]]. An uploaded translation is compiled into [[languages|translation DLL]] automatically and it is made promptly available for a download. |
- | Some strings use ''&'' character to mark accelerator character (the one after ''&''). When user presses ''Alt-X'', where ''X'' is the accelerator character, associated control (button, edit box, menu, etc.) receives focus (cursor moves to it, etc.). The accelerator character should be unique on each screen (window). It is also difficult to maitain this, as the dialogs use often strings from different sources. So you'll probably succeed with this after several tries. | + | ==== Translation Strings ==== |
- | Also please, if you encounter strange sequence like ''#13#10'', include it in translation too. For such strings I recommend you to copy the English one and replace the words only, keep the "strange" patterns. Avoid ever using double quotes (''"''), use always single-quotes ('''''), in this just follow the way the original english string is written. Double quotes are used to mark begin and end of the string. | + | Translation strings use C-style string syntax. Double quotes are used to delimit the strings. Double quotes, line breaks and backslashes in strings need to be escaped using a |
+ | backslash -- ''\"'', ''\n'' or ''\r\n'' and ''\\'' respectively. All other characters should be used literally. | ||
- | In section ''[TextsWin1.rc]'', the first string has key ''TRANSLATOR_INFO''. This string will appear on [[ui_about|About dialog]]. You may enter there anything you want. Like "Transation (c) 2005 Your name", or whatever you want. | + | Some strings contain parameter placeholders like ''%s'' or ''%d''. These are replaced by an actual value at run-time. Make sure that you keep the same order of placeholders as in the original English string. We know that it can be difficult sometimes, because some languages have different word order, but it has to be so. |
- | You do not have to translate all strings at once. You may translate several hundreds each turn. Upload, what you have done to [[this>../transladmin.php|translation web-interface]]. I'll do regular updates of translation DLLs. | + | Make sure that translations of window control labels fit into the limited space available on the window. On the contrary, (error) messages might be usually as long as needed. |
- | ===== Explanation of Some String Meaning ===== | + | Some strings use the ''&'' character to mark the accelerator character (the one after ''&''). When the user presses ''Alt+X'', where ''X'' is the accelerator character, the associated control (button, edit box, menu, etc.) receives the focus (cursor moves to it, etc.). The accelerator character should be unique for each screen (window). It can be difficult to achieve, as dialogs often use strings from different sources. You'll probably need several attempts to get it right. |
- | Here I provide explanation of some string meaning (and/or usage), where it may not be not obvious. I will expand the list each time someone asks. You also add your experiences youself. | + | |
- | ^ [Section] ^ Key Meaning/usage ^ | + | ==== [[special_sections]] Special Sections ==== |
- | | ''[FileSystemInfo.dfm] ...Label6.Caption'' | [[protocols|"Can execute arbitrary command"]]. Arbitrary means ANY command. With WinSCP user can execute any [[remote_command|remote command]] he wants from the [[ui_console|console window]]. | | + | |
- | | ''[FileSystemInfo.dfm] ...Label9.Caption'' | "Native text (ASCII) mode transfers". Native means that the protocol has its own support for [[transfer_mode|text mode transfers]]. This is true only for SFTP protocol version 4 and newer. For SCP and other SFTP versions, WinSCP only simulates the text transfers. | | + | |
- | | ''[Login.dfm] ...ProxyLocalhostCheck.Caption'' | It means "Do use proxy even for localhost", not "Don't use proxy for localhost". | | + | |
- | | ''[Login.dfm] ...PingDummyCommandButton.Caption'' | By dummy I mean command that does in fact nothing (or at least it does not change anything). For SCP I do ''echo something'', for SFTP I get properties of root directory. | | + | |
- | | ''[NonVisual.dfm] ...SynchorizeBrowsingAction.Caption'' | Read [[task_navigate#synchronize_browsing|documentation]] | | + | |
- | | ''[NonVisual.dfm] ...AuthTISCheck.Caption'' | [[&url(puttytis)|Attempt TIS or CryptoCard authentication]] | | + | |
- | | ''[TextsCore1.rc] DETECT_RETURNVAR_ERROR'' | WinSCP in SCP mode tries to detect first, if in current user shell ''$?'' or ''$status'' variable contain result of the last command. | | + | |
- | | ''[TextsCore1.rc] SFTP_SERVER_MESSAGE_ UNSUPPORTED'' | It is used for "Error message from server" in ''SFTP_ERROR_FORMAT'', when SFTP cannot provide one. | | + | |
- | | ''[TextsCore1.rc] CIPHER_BELOW_TRESHOLD, CIPHER_TYPE_CS, CIPHER_TYPE_SC'' | ''%s'' in ''%scipher'' of ''CIPHER_BELOW_TRESHOLD'' is replaced either with empty string or by value of ''CIPHER_TYPE_CS'' or ''CIPHER_TYPE_SC''. Both replacements should have a space at the end, if appropriate for particular language. | | + | |
- | | ''[TextsWin1.rc] MUTEX_RELEASE_TIMEOUT, DRAGEXT_MUTEX_RELEASE_TIMEOUT'' | Mutex is technical term standing for "MUTual EXclusive". I believe that it does not translate to most of the languages. | | + | |
- | ===== How to Use Translation DLL ===== | + | Section ''[default.isl]'' contains general strings for the setup application ([[&url(innosetup)|Inno Setup]]), which is used to implement WinSCP installer. Inno Setup has already been translated to [[https://jrsoftware.org/files/istrans/|many languages]]. If your language is among them, we will copy Inno Setup translation to this section. If you disagree with the official translation, please discuss it with Inno Setup translator, rather than modifying its copy in WinSCP translation. |
+ | |||
+ | In section ''[TextsWin1.rc]'', the first two strings have the keys ''TRANSLATOR_INFO2'' and ''TRANSLATOR_URL''. They will appear on the [[ui_about|About dialog]]. You may include there anything you want. Such as, //"Translation (c) 2022 Your name"//, or anything else. For the URL, you can use both an HTTP URL and an e-mail address. | ||
+ | |||
+ | ==== [[testing]] Testing Your Translation ==== | ||
+ | |||
+ | You can generate [[languages|translation DLL]] on your own to test the translation before uploading it. For that, download "Translator" tool from [[this>../transladmin.php|translation web-interface]]. Extract the downloaded ZIP file file and follow instructions in the contained ''readme.txt'' file. | ||
+ | |||
+ | ==== [[using_dll]] How to Use Translation DLL ==== | ||
Read [[languages|documentation]]. | Read [[languages|documentation]]. | ||
- | ===== How to Use Translation Web-interface ===== | + | ==== [[git]] Git ==== |
- | Each page includes description of its features. If you consider it to be insufficient, let me know, I'll improve it. | + | Translations are also stored on the [[https://github.com/winscp/winscp/tree/translations/translations|project Git repository on GitHub]]. The repository is updated once a day. |
- | ===== CVS ===== | + | Use Git only to access historical translations. To download the current translation, always use [[this>../transladmin.php|translation web-interface]]. The web-interface updates the most recent translation (as stored on in the repository) on-the-fly to the last WinSCP version, e.g. it adds new strings to translate (that did not exist, when the translation was updated the last time), removes obsolete strings, etc. |
- | Translations are stored on project CVS as well. CVS is updated in regular intervals (every few hours). | + | |
- | Project CVS can be accessed anonymously. To checkout whole ''translations'' module use following command (press ''Enter'' if you are prompted for password): | + | By default, your changes to translations are committed to Git repository under your name, but with a generic email address (''translator@winscp.net''). If you want to have your changes associated with your real email address/GitHub account, let us know. |
- | <code> | + | ===== [[doc]] Translating the Introduction Page ===== |
- | cvs -z3 -d:pserver:anonymous@cvs.sourceforge.net:/cvsroot/winscp co translations | + | In addition to translating the application itself, you are welcome to prepare a localized introduction page for the WinSCP documentation. |
- | </code> | + | |
+ | For a start, there is a [[lang:template|simple template]] (in English) covering the very basic information about WinSCP. However you are welcome to go more into details. Also if you know of or maintain personally a site in your language about WinSCP, you are welcome to link it. | ||
+ | |||
+ | To create a translated introduction page, type URL ''%%https://winscp.net/eng/docs/lang:<lang>%%'' into your browser, where ''<lang>'' is your language ID (i.e. the extension of the translation DLL) and press the //Create this page// button on the right. | ||
+ | |||
+ | Do not add another localized pages apart from the introduction one. | ||
+ | |||
+ | To start, you may copy the source of the [[lang:template|template page]] (open it, press //Edit this page// and copy the content). Though, remove the ''NOINDEX'' directive (which prevents search engines indexing the template) and all footnotes (in double round-brackets). | ||
+ | |||
+ | Before editing, login to the wiki using your [[this>../../forum/|WinSCP forum account]]. This way, you receive some credit for your contributions. Also, we will be able to recognize your edits from wiki vandalism. | ||
+ | |||
+ | You will receive a notification, whenever the localized page is changed (be it by us or a random visitor). | ||
+ | |||
+ | As the last step, add your language name (local name, not in English) to a [[lang:name|list]], to give us a hint about an entry for the language in the website language menu. | ||
+ | |||
+ | Once you have created the localized version, we will give it a shortcut address in a form ''%%https://winscp.net/<lang>/%%''; and we will add an entry to the website language menu. The address ''https://winscp.net/'' will automatically redirect to the localized page, if a browser/visitor has the corresponding language set as the preferred one. | ||
+ | |||
+ | If we do not do so, it may be because your translation does not qualify for public usage yet due to some shortcomings; and we had have no means to contact you, because you have not registered. In such case, please post a message on [[this>../../forum/|support forum]]. | ||
+ | |||
+ | ===== [[rank]] Forum Rank ===== | ||
+ | We will tag your forum account as //"Translator"// to highlight it in the threads. | ||
- | There is also [[&url(cvswebtransl)|web-based CVS viewer]]. It is delayed after primary CVS server. | + | ===== Automatic Updates ===== |
- | More information about CVS is provided on [[&url(cvsproject)|project page]].· | + | As a translator, you are entitled to [[updates#automatic_upgrade|automatic application updates]]. To enable automatic updates, enter your translator account username/email in [[ui_pref_updates|WinSCP preferences]]. |