SabakiHQ / Sabaki

An elegant Go board and SGF editor for a more civilized age.
https://sabaki.yichuanshen.de/
MIT License
2.39k stars 375 forks source link

Now looking for translators! #647

Open yishn opened 4 years ago

yishn commented 4 years ago

A lot of people have asked for translations and stated their willingness to help translating, so I'm happy to announce that we finally have an infrastructure in place to make translations as seamless as possible. Head over to Sabaki I18n to see how you can contribute.

To avoid duplicate work in the beginning, I suggest everyone who wants to start translating to comment with their language on this thread, so I can put them in this table:

Language Translator PR status
Dutch @benjaminvdb In Progress
German @Gargantuar314 In Progress
Brazilian Portuguese @joaomarcuslf2 Merged

A big thanks to all the translators in advance!

geovens commented 4 years ago

I almost finished Simplified Chinese https://github.com/geovens/sabaki-i18n/blob/master/src/zh-Hans.i18n.js but I have some questions:

  1. Many translated strings in preferences are not shown?
  2. Things like ${appName}, ${author} are not replaced?
  3. Are hotspots just bookmarks?
  4. What does 'fork' mean in navigation menu?
  5. What does 'move colorization' mean in view menu?
  6. Does 'zoom' in tools menu only affect game tree?
  7. Where does 'unclear position' or 'even position' show? Do they mean 'who will win is unclear' and 'black and white seems to have even chance to win'?
  8. What does 'instantly play out analysis variations on board' do?
  9. What does 'show automatic move titles' do?
  10. There are multiple strings of 'All Files'. Where are they shown?
  11. Where is AdvancedPropertiesDrawer?
  12. What does 'update result' in score drawer do?
yishn commented 4 years ago

@geovens Thanks for your work! I put you on the list for Simplified Chinese.

  1. Thanks for the report, I'll try to fix it. In the meantime, you can toggle the Preferences checkboxes to update the strings manually.
  2. Please look at the model translation file en.i18n.js as how to handle interpolation. You can't just specify a string, but a function like this:
    '${appName} v${version}': p => `${p.appName} v${p.version}`
  3. Yes, but the specification calls thems hotspots, because the hotspot move should show "something interesting (e.g. node contains a game-deciding move)."
  4. A fork is a node where the game splits into multiple variations.
  5. If you annotate a move as 'good', 'interesting', 'doubtful', or 'bad', it will appear on the board with the colors green, blue, purple, or red if the setting is activated.
  6. No 'Zoom' affects the whole interface.
  7. If you annotate a move, it will be shown in the comments section as an icon. The text 'Unclear Position', etc. will be shown as tooltip.
  8. In engine analysis mode, if you hover on a stone, it will show the whole variation at once instead of playing the variation stone by stone if the setting is activated.
  9. For each move we generate a move title based on the move, e.g. 'Hane', 'One-Point Jump', 'Chinese Fuseki', etc. if the setting is activated.#
  10. Usually 'All Files' is shown in the open file dialog as an option for the extension filter.
  11. In the main menu, choose 'Tools' > 'Open SGF Properties...' to open the AdvancedPropertiesDrawer.
  12. 'Update Result' will write the end score into the SGF file.
isty2e commented 4 years ago

I've completed most of the Korean translation:

https://github.com/isty2e/sabaki-i18n/blob/korean/src/ko.i18n.js

However, some go terms like "Dog's head" are not well defined in Korean and I think there is no proper jargon to describe such shapes. What is your recommendation?

yishn commented 4 years ago

Thanks for your work! Not sure, either don't translate and fall back to English, or specify a string with a space character in it, so it doesn't fall back to English?

isty2e commented 4 years ago

Then I'll let it fall back to English. Somebody might find an adequate translation, and I feel like leaving them as blank is not a good idea.

yishn commented 4 years ago

The 'Load Language File' feature is just a convenience. Not all strings can be replaced on runtime. For the actual language switching, the user will be required to restart Sabaki.

geovens commented 4 years ago

While I made some changes in my translation, I also noticed that @af990m forked the repo again from my fork, and had made changes too. I believe that many of their changes are better than mine. So I guess af990m could consider check my last two commits as revision suggestions, merge them into theirs, and the main repo could merge from af990m's repo?

af990m commented 4 years ago

@geovens The result you submitted is very good!Although I used the same shortcut as the English version, but it detracts from the aesthetics of the interface. :( It's hard to compare which is better, so please ignore my PR. :)

af990m commented 4 years ago

I made a conversion from simplified to traditional https://github.com/af990m/sabaki-i18n/blob/master/src/zh-Hant.i18n.js

yishn commented 4 years ago

@ParmuzinAlexander Please open a new issue and describe your problem in more detail.

yauwing commented 4 years ago

I made a conversion from simplified to traditional https://github.com/af990m/sabaki-i18n/blob/master/src/zh-Hant.i18n.js

Hello,

Thanks for the great works!

There are some typos in both @geovens and your translation, line 49 Undo should be 撤消 not 撤銷 line 50 'Redo': '取消撤銷', should be 取消撤消 line 267 'sec per move': '每秒步數' should be 每步秒數 line 338, 448 and 496 'White': '白旗', should be 白棋 line 450 'Area': '數子', should be '子數' line 451 'Territory': '數目',should be '目數'

Other comments:

line 45 and 293 'Score' , this one a bit tricky, Your translation 數子 is appropriate for Chinese rule, while @geovens translation 计算目数 is appropriate for Japanese rule. How about use a more generic translation such as 計算勝負 ? Ideally, it would be great if the text or translation could change according to the rule selected but this is obviously not possible at this moment.

line 60, 211, 277 and 328 'Label Tool': '字母' Since Label can have more than one alphabet, I would be suggest to translate as 標記工具 or 標記

line 95 'Enter a move number to go to': '到指定手數', I would translate as '請輸入手數'or'請輸入前往的手數' I would prefer to use 往 or 前往 instead of 到 for the translation of the words "Go to" because it may not be possible to arrive there if the destination does not exist

line 107 and 260 Generate move is not exactly 讓引擎走一手, because the engine will continue to generate moves afterward. How about 讓引擎走棋?

line 132 'Show Move Colorization': '顯示移動著色' Move translate as 移動 is not appropriate, how about 棋步 or simply 棋?

line 146 'Transform Board': '旋轉棋盤' is not just rotation, 棋盤轉變 is what I found from Google translate

line 309 'Toggle group status.': '點選' looks incomplete to me, how about '點擊切換死活'?

line 502 'Game Records': 'Game Records', can be translated as 棋局記錄 or 對局記錄

This one is just my opinion, there are some inconsistencies in some of the translations in: Tools, Go to Example line 52 Select Tool is translated as 選擇工具 while line 53 Stone Tool is translated as 棋子, I would prefer to translate as 棋子工具 to keep the translation more consistent

geovens commented 4 years ago

Thank you all, I have merged revisions by @af990m and @yauwing into my fork, and will create a pull request.

line 60, 211, 277 and 328 'Label Tool': '字母' Since Label can have more than one alphabet, I would be suggest to translate as 標記工具 or 標記

I feel that 标记 refers to all of those: cross, triangle, square, label, etc. At first I translated 'label' to '字母/文字', indicating that it could be more than one letter, but now I feel that it looks redundant because I guess few people uses more than one letter, so I adopted af990m's change into just '字母', while still uses '字母/文字' when user is entering text, to indicate the possibility of more than one letter.

line 107 and 260 Generate move is not exactly 讓引擎走一手, because the engine will continue to generate moves afterward. How about 讓引擎走棋?

I don't know engine could continue to generate moves afterward. It has always been just one move for me. When does it generate multiple moves?

line 52 Select Tool is translated as 選擇工具 while line 53 Stone Tool is translated as 棋子, I would prefer to translate as 棋子工具 to keep the translation more consistent

In the Tools menu, there are Stone Tool, Cross Tool, Label Tool, etc.. If we change Stone Tool from 棋子 to 棋子工具, then we should add 工具 to all the rest tools too, which may appear a bit redundant. Just my 2 cents.

af990m commented 4 years ago

I just use the little to get the big.(我只是抛砖引玉而已) @geovens @yauwing :)

yauwing commented 4 years ago

You are right! Generate Move only generates one move. I probably has mixed up Start engine vs engine game with Generate Move Sorry for the confusion caused.

I don't know engine could continue to generate moves afterward. It has always been just one move for me. When does it generate multiple moves?

y-ich commented 4 years ago

Hi, @yishn san.

Thank you for your efforts! I start Japanese translation. Could you tell me the meaning of "&" in English translation?

af990m commented 4 years ago

In my opinion, the symbol "&" and the letters that follow it represent shortcuts @y-ich If a letter is underlined in a menu, press the Alt key and the underlined key together instead of choosing that menu item

y-ich commented 4 years ago

@af990m san,

Thank you for your comment! I thought so, too.

If so I think that a template of displaying a shortcut for non-alphabetical language will be helpful for translation. There are no letters "F" in "ファイル", which means File in Japanese. And you cannot input any letters in "ファイル" from keyboard because this is a result of Input Method Editor(IME).

af990m commented 4 years ago

@y-ich The method of change can be like this module.exports = { 'menu.file': { 'New Window': null, 'File': '(&F)ファイル', ... shortcuts "alt + F" still work

meybe it detracts from the aesthetics of the interface.

y-ich commented 4 years ago

@af990m san,

Yes, so I want to hear from @yshin san such that '(&<shortcut key>)<translation>' is a template for non-alphabetic language. It may be worse for each translator to create their own template for this kind of work.

isty2e commented 4 years ago

For the time being, I didn't include them in Korean translation. Is it supposed to be language-specific?

yishn commented 4 years ago

@y-ich Unfortunately, I don't know how other native applications handle menu keyboard hints on Japanese/Chinese/Korean. Also, on macOS, AFAIK there are no menu keyboard hints in the first place... Only Linux and Windows support it, I think.

yishn commented 4 years ago

For now, I think we should just go with no keyboard hints, otherwise it would look silly on macOS.

ebifrier commented 4 years ago

In Japanese, the most popular menu display in Windows looks like this. sample-menu

But there are no keyboard shortcuts in Chinese or Korean currently, so I agree with yishn to go without keyboard shortcuts at first.

y-ich commented 4 years ago

I created a pull request for Japanese.

How can I check it on Sabaki?

yishn commented 4 years ago

@y-ich Please check out the section 'Try out your translation'.

y-ich commented 4 years ago

@yishn san,

Thank you for your information! (I should have read it first.)

Parts of translations are not valid in preferences. Maybe those are related with items. How can I debug it?

yishn commented 4 years ago

For now, you can toggle the Preferences checkboxes to update the strings manually.

benjaminvdb commented 4 years ago

I've started working on the Dutch translation.

benjaminvdb commented 4 years ago

I'm currently at line 150 of 534 of my first pass through the items.

One problem I'm having is with capitalization of the menu items. My feeling is that it's uncommon to capitalize all nouns in Dutch. For example: Show Next Moves looks good in English, but Volgende Zet weergeven looks rather awkward in Dutch. I think Volgende zet weegeven is better, but I don't want to deviate from Sabaki's thoughts about this.

Note that there is no language rule that prefers Sabaki's capitalization for Dutch like, for example, German would. It's not uncommon to see non-standard capitalization for headlines/headers in Dutch, but this is more a matter of style than syntax.

What are your thoughts about this?

isty2e commented 4 years ago

I think localization should prioritize how people using that language feel above all. My Korean translation is not a literal one (which could've been awkward) and some strings even have somewhat different meanings from original ones.

yishn commented 4 years ago

Exactly, in English it is common to have menu items capitalized, but in German, they are not. On any doubts, please look at any native applications on how they do the capitalization.

ParmuzinAlexander commented 4 years ago

Can you remove the Russian translation for keyboard shortcuts 'Home', 'End', 'Page Up', 'Page Down'?

yishn commented 4 years ago

@ParmuzinAlexander I'm not sure what you mean?

ParmuzinAlexander commented 4 years ago

@yishn Hotkeys here https://imgur.com/N4Y0PFp

yishn commented 4 years ago

Those are Electron/Chromium strings over which I have no control of. Currently, there is also an Electron bug where I can’t set the Electron language programmatically. But why do you not want Russian strings for keyboard shortcuts if you’re using Russian anyway?

ParmuzinAlexander commented 4 years ago

@yishn The Russian keyboard does not have a translation of these buttons, to find this button you need to translate from Russian to English. 'Home' literally translated 'Main Page' 'End' literally translated 'To complete' 'Page Up' literally translated 'Up' 'Page Down' literally translated 'Scroll Down' Ok it's not important, just 4 hotkeys...

yishn commented 4 years ago

I think these should be the system strings of keyboard shortcuts. If they're not correct, you should probably open a bug on Electron, or even Chromium.

yauwing commented 4 years ago

I just noticed that (I probably had done it before and then forgot) you can generate more than one move using the Generate Move command as following:

Start a new handicapped game with at least 2 stones, and assign white player to a bot. The game would not start until Generate Move was invoked, after black responded, white will continue to generate the next move.

line 107 and 260 Generate move is not exactly 讓引擎走一手, because the engine will continue to generate moves afterward. How about 讓引擎走棋?

I don't know engine could continue to generate moves afterward. It has always been just one move for me. When does it generate multiple moves?

yishn commented 4 years ago

This is the consequence of assigning an engine to a player. Sabaki will automatically generate a move for an engine if it is assigned to a player. But clicking on 'Generate Move' will only generate one move; it will not initiate an engine vs. engine or engine vs. player game.

Attaching an engine and not assigning it to a player, clicking on 'Generate Move' will not let the engine continue generating moves after you respond.

romton843 commented 4 years ago

I'm working on the French translation... Thank you all for your great work.

Gargantuar314 commented 4 years ago

I would like to contribute for the German translation, although I don't know a lot of the German terms.

yishn commented 4 years ago

@Gargantuar314 There's no need to provide a complete translation. Just do what you can and hopefully someone else can contribute to it. It's a community effort, after all!

mlopezviedma commented 4 years ago

Hi all! I'll gladly start working on the complete Spanish translation. Cheers!

joaomarcuslf commented 4 years ago

Hi! I can contribute with Brazilian portuguese, can I create the branch?

yishn commented 4 years ago

Sure, thanks a lot, I'll add you to the list.