




                     Window Maker Internationalisation


          ~ A guide to enable support for language translations ~
                ~ in Window Maker and to the contributors ~
                     ~ who want to help translating. ~

                          --  Christophe CURIS  --


~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

This manual is for Window Maker window manager, version 0.96.0.

Copyright (c) 2015 The Window Maker Team.

    This program is free software; you can redistribute it and/or modify
    it under the terms of the GNU General Public License as published by
    the Free  Software Foundation; either  version 2 of the  License, or
    (at your option) any later version.

    This program is distributed in the hope  that it will be useful, but
    WITHOUT  ANY   WARRANTY;  without  even  the   implied  warranty  of
    MERCHANTABILITY or  FITNESS FOR  A PARTICULAR  PURPOSE. See  the GNU
    General Public License for more details.

    You should  have received a copy  of the GNU General  Public License
    along with this program, see file COPYING for details.


  Published by The Window Maker team on 31 August 2026.


~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~


    1 Enabling Languages support   . . . . . . . . . . . . . . . . .  59
      1.1 Getting the list of supported languages  . . . . . . . . .  89
      1.2 Translations for Menus   . . . . . . . . . . . . . . . . . 114
      1.3 Setting 'LINGUAS' at system level  . . . . . . . . . . . . 148

    2 Choosing the Language  . . . . . . . . . . . . . . . . . . . . 164

    3 Troubleshooting  . . . . . . . . . . . . . . . . . . . . . . . 212

    4 Contribute to Translations   . . . . . . . . . . . . . . . . . 263
      4.1 Install the latest sources   . . . . . . . . . . . . . . . 274
      4.2 Updating the Translations  . . . . . . . . . . . . . . . . 307
      4.3 Translate the Man Pages  . . . . . . . . . . . . . . . . . 354
      4.4 Checking the Result  . . . . . . . . . . . . . . . . . . . 382
      4.5 Submitting your Contribution   . . . . . . . . . . . . . . 399


1 Enabling Languages support
****************************

Window Maker has the possibility to be  translated in many languages, but by
default none of them will be installed, and the support for translation will
not be compiled.

   To  enable  the  translation  capabilities, you  have  to  specify  which
language(s)  you want  to  be  installed: this  is  done  with the  variable
'LINGUAS' when running the 'configure'  script. This variable should contain
the space-separated list of languages you want to install.

   You could  for instance enable both  French ('fr') and Dutch  ('nl') with
this:

     ./configure LINGUAS="fr nl"

   You can of course  add any other option that you  want to the 'configure'
command. From  the moment you  specify the variable, the  'configure' script
will check  that you have  the appropriate dependencies for  this (basically
the 'gettext'  function and the 'libintl'  library); when you run  'make' to
compile the project,  it will also compile the translation  ('mo' files) for
the  language(s) you  asked  (if available,  of  course),  and during  'make
install' it will install them in the usual directory.

   The  installation  directory can  be  changed  with the  standard  option
'--localedir'   to  the   'configure'   script,  the   default  path   being
"<prefix>/share/locale/<lang>/LC_MESSAGES").


1.1 Getting the list of supported languages
===========================================

The naming convention for the languages  follows the ISO 639-1 standard, for
which   you  can   find  a   summary  list   in  the   GNU  gettext   manual
(https://www.gnu.org/software/gettext/manual/html_node/Usual-Language-Codes.html).

   But as Window Maker does not support  all of them, the 'configure' script
will print a  warning for each language  you specify that it  does not know,
and sum up at the end the list of enabled languages that will be installed.

   There is a non-standard possibility to  set 'LINGUAS' to 'list', in which
case  the 'configure'  script  will provide  you the  list  of languages  it
supports, and stop:

     ./configure LINGUAS="list"

   There  is  also  another  non-standard  possibility  to  enable  all  the
languages that Window Maker supports by setting 'LINGUAS' to '*'. This is an
internal  trick implemented  so the  development team  can have  the command
'make distcheck' include some checks on translations:

     ./configure LINGUAS='*'


1.2 Translations for Menus
==========================

In order to propose an Application Menu (also called Root Menu) that is also
translated in  the language  of the interface,  Window Maker  implements two
complementary mechanisms:

   The first,  always enabled when i18n  support is enabled, is  to look for
the menu file containing the name of the locale. For example, if the file is
called "menu"  and the  language is set  as 'LANG=fr_FR.utf-8',  then Window
Maker will search for, and use the first match found:

   * 'menu.fr_FR.utf-8'
   * 'menu.fr_FR'
   * 'menu.fr'
   * 'menu'

   The second possibility, which is not enabled by default, is to be able to
use a custom "po"  file which contains the translations for  the text of the
menu.  This   feature  is  enabled  at   compile  time,  using   the  option
'--with-menu-textdomain'  to the  'configure'  script. For  example, if  you
specify:

     ./configure --with-menu-textdomain=WMMenu

then the translations for the menu will  be searched in the file "WMMenu.mo"
located    at   the    standard   location,    the   default    path   being
"<prefix>/share/locale/<lang>/LC_MESSAGES/WMMenu.mo".

   If  you do  not enable  the feature  (the default  behaviour, or  with an
explicit '--without-menu-textdomain'),  then Window Maker will  *not* try to
translate the strings, even using its own domain file ("WindowMaker.mo").


1.3 Setting 'LINGUAS' at system level
=====================================

As the variable  'LINGUAS' is quite standard, you also  have the possibility
to set its  value in the "config.site"  file for Autoconf. This  file can be
placed in one of these paths:

   * "<prefix>/share/config.site"
   * "<prefix>/etc/config.site"

   This way, the same  language list will be used for  all the programs that
use Autoconf that you would compile. Please  note that if you also specify a
value on the  command line, it will  have precedence over the  value in that
file.


2 Choosing the Language
***********************

If  you have  compiled  and installed  Window Maker  with  support for  your
language, the  effective translation  is done  is the very  same way  as any
other application on an Unix system, you just have to set the shell variable
'LANG' to  your language before 'wmaker'  is started. In 'sh'  type of shell
(sh, ksh, bash, ...), this is done for example with ('fr' is for French):

     export LANG=fr

   There is also a command line option '--locale' for Window Maker which may
be used to set the language:

     wmaker --locale fr

   When using this  option, Window Maker will use the  locale you specified,
redefining  the 'LANG'  environment variable  to this  value so  all program
started from Window Maker will inherit its value.

   If your  system is using  systemd, you can  also configure the  locale at
system level using the command:

     localectl set-locale LANG=fr

   You  can check  if  the  current value  is  properly  supported with  the
command:

     locale

   If this  does not work,  you may need first  to activate the  support for
your locale in the system; you can get the list of currently enabled locales
with the command:

     locale -a

   You should be able  to enable a new language support  by editing the file
"/etc/locale.gen" to uncomment  the locale(s) you need (by  removing the '#'
character  and  space(s)  in  front  of  it,  and  by  running  the  command
'locale-gen' as root.

   For further  information, you may  wish to read  dedicated documentation,
for      example     from      the      Linux     Documentation      Project
(http://tldp.org/HOWTO/HOWTO-INDEX/other-lang.html)  or  through pages  like
Shell         Hacks'         note         on         Changing         Locale
(http://www.shellhacks.com/en/HowTo-Change-Locale-Language-and-Character-Set-in-Linux).


3 Troubleshooting
*****************

If I18N support does not work for you, check these:

   - the 'LANG' environment  variable is set to your locale,  and the locale
     is  supported by  your OS's  locale or  X's locale  emulation. you  can
     display all supported locales by  executing "'locale -a'" command if it
     is available; you  can check if your locale is  supported by X's locale
     emulation, see "/usr/share/X11/locale/locale.alias"

   - check if you  are using an appropriate fonts for  the locale you chose.
     If you're using a  font set that has a different  encoding than the one
     used by Xlib  or libc, bad things can happen.  Try specifically putting
     the encoding  in the 'LANG'  variable, like 'ru_RU.KOI8-R'.  Again, see
     "/usr/share/X11/locale/locale.alias"

   - the fonts  you're using support  your locale.  if your font  setting on
     "$HOME/GNUstep/Defaults/WindowMaker" is like...

             WindowTitleFont = "Trebuchet MS:bold:pixelsize=12";
             MenuTitleFont   = "Trebuchet MS:bold:pixelsize=12";

     then  you  can't  display  Asian  languages  ('ja',  'ko',  'ch',  ...)
     characters using 'Trebuchet MS'. A font  that is guaranteed to work for
     any language is 'sans' (or 'sans-serif').  'sans' is not a font itself,
     but an alias which points to multiple  fonts and will load the first in
     that list that has the ability to  show glyphs in your language. If you
     don't know a font  that is suited for your language  you can always set
     all your fonts to something like:

             "sans:pixelsize=12"

     However, please note that if your font is something like:

             "Trebuchet MS,sans serif:pixelsize=12"

     this will not be able to display Asian languages if any of the previous
     fonts before sans are installed. This is because unlike the proper font
     pickup that  'sans' guarantees for  your language, this  construct only
     allows a font fallback mechanism, which tries all the fonts in the list
     in order,  until it  finds one  that is available,  even if  it doesn't
     support your language.

     Also  you  need  to  change  font   settings  in  style  files  in  the
     "$HOME/Library/WindowMaker/Style" directory.

   - the  'LC_CTYPE' environment  variable is  unset or  it has  the correct
     value. If you don't know what is the correct value, unset it.


4 Contribute to Translations
****************************

You may have noticed that many translations  are not up to date, because the
code has evolved but the persons who  initially contributed may not have had
the time to continue, so any help is welcome.

   Since Window Maker 0.95.7 there are some  targets to 'make' that can help
you in that task.


4.1 Install the latest sources
==============================

If you want to  contribute, the first step is get  the development branch of
the code; this is done using 'git'. If you do not feel confident at all with
using 'git',  you may  also try  to ask  for a  snapshot on  the developer's
mailing list <wmaker-dev@googlegroups.com>. With 'git' the procedure is:

     # Get your working copy of the sources
     git clone git://repo.or.cz/wmaker-crm.git

     # Go into that newly created directory
     cd wmaker-crm

     # Switch to the branch where everything happens
     git checkout next

     # Generate the configuration script
     ./autogen.sh

   Now you should have an up-to-date working  copy ready to be compiled; you
will not need to go the full way  but you should run the 'configure' script,
so it will create the "Makefile"s, and you may want to compile the code once
so it will not do it again automatically later while you are doing something
else:

     # Setup the build, enabling at least the language you want to work on
     ./configure LINGUAS="<list of iso 639 country code>"

     # Compile the code once
     make


4.2 Updating the Translations
=============================

The typical process for translating one program is:

   * generate a POT  file (PO Template): this is done  with 'xgettext' which
     searches for all the strings from the sources that can be translated;

   * update the  PO file  for your  language: this  is done  with 'msgmerge'
     which compares the PO file and aligns it to the latest template;

   * edit the new PO  file: this is done by you  with your favourite editor,
     to add the missing 'msgstr', review the possible fuzzy matches, ...

   * check  the PO  file: unfortunately  there is  no definitive  method for
     this;

   * submit your contribution to the project: this is done with 'git'.

   In Window Maker, you have actually 5 'po' files to take care of:

   - "po/<lang>.po": for Window Maker itself
   - "WPrefs.app/po/<lang>.po": for the Preference Editor program
   - "WINGs/po/<lang>.po": for the graphic toolkit library
   - "wrlib/po/<lang>.po": for the image processing library
   - "util/po/<lang>.po": for the command-line tools of Window Maker

   As  stated previously,  there is  a 'make'  target that  can help  you to
automatically generate the POT and update the PO for these 5 cases:

     make update-lang PO=<lang>

   Once run,  it will have  updated as needed the  5 'po' files  against the
latest source code.  You may wish to use  the command 'git gui'  to view the
changes; you  can now edit  the files  to complete the  translation, correct
them, remove deprecated  stuff, ... Please note that the  encoding should be
set to UTF-8 as this is now the standard.

   If you think an  error message is too obscure, just  ask on the developer
mailing  list <wmaker-dev@googlegroups.com>:  in addition  to clarifications
there's even a chance for the original message to be improved!

   You  may find  some information  on  working with  'po' file  in the  GNU
gettext                                                        documentation
(https://www.gnu.org/software/gettext/manual/html_node/Editing.html).


4.3 Translate the Man Pages
===========================

You may want to extend the translation to the documentation that is provided
to users in the  form of Unix _man pages_. The sources of  the man pages are
located in  the "doc/" directory;  the translation  should be placed  in the
directory "doc/_lang_/" with the same file name.

   The directory will also need a file "Makefile.am" which provides the list
of man pages to be included in the distribution package and to be installed.
You can probably get inspiration from an existing one from another language;
if  you do  not  feel confident  about it  do  not hesitate  to  ask on  the
project's mailing  list (<wmaker-dev@googlegroups.com>), either for  help or
to ask someone to make it for you.

   Please note that although most man pages sources are directly in man page
format  (nroff, the  file  extension being  a  number), a  few  of them  are
processed by  a script (those  with the ".in" extension,  like "wmaker.in").
This is done because in some case we want the man page to reflect the actual
compilation options.

   You may not want to bother with this hassle, in which case you can simply
name your translation file with the  ".1" and remove the special '@keyword@'
marks. If  you are sure  you want  to keep that  processing but do  not feel
confident about  hacking the  "Makefile.am" do  not hesitate  to ask  on the
project's mailing list (<wmaker-dev@googlegroups.com>).


4.4 Checking the Result
=======================

In the Window  Maker build tree you  also have another target  that can help
you, it is 'make check'.

   At  current  time, it  does  not  check much,  but  if  during the  'make
update-lang'  new 'po'  file  have been  created you  may  get some  errors,
because you have to add these new  files to the variable 'EXTRA_DIST' in the
corresponding "Makefile".

   If you  do not  feel confident about  doing it, do  not worry,  just tell
about it when you  submit your work, and some developer  on the mailing list
will  just  be  happy to  do  it  for  you  when integrating  your  valuable
contribution (we always like when someone helps making Window Maker better).


4.5 Submitting your Contribution
================================

Preliminary Remark:  if the update process  made changes in a  'po' file but
you did not change  any 'msgstr' content, it is probably a  good idea to not
submit the changes to that 'po' file because it would just add noise.

   When you feel  ready to send your  changes, the first step  is to prepare
them. This is done with 'git': if you  have not run the 'git gui' previously
then it is a good time to do  it now. This window offers you the possibility
to show your changes and to decide what you want to send.

   The window is divided in 4 panes:

   * top-right show the  current changes you have selected,  for review (and
     also for cherry-picking stuff if you want to select precisely)

   * top-left  ("Unstaged Changes")  the list  of files  with changes  to be
     send, you can click on the name of the file to see the changes, you can
     click on the  icon of the file if  you want to send all  the changes in
     this file; an icon  in blue shows a file that have  been changed and an
     icon in black shows a file that is new

   * bottom-left ("Staged Changes") the list  of files with changes that you
     have chosen  to send so  far, you  can click on  the file name  to view
     these changes,  you can  click on the  icon if you  want to  remove the
     changes from this file from the list to send

   * bottom-right ("Commit Message") the message  you want to attach to your
     changes when you submit them to the development team

   The idea here is  to pick your changes to the 'po'  files; for the commit
message you may wish to stuck to a simple, single line:

    "Updated translations for <lang>"

   The penultimate step is to click on the  button <Sign Off> (it will add a
line in  the commit message),  and then click  on the button  <Commit>. From
this time,  the commit message  will clear  itself and the  "Staged Changes"
also, showing that your action was done.

   You may  now quit the  'git gui', the final  step begins by  running this
command:

     git format-patch HEAD^

   This       will       generate        a       file       named       like
"0001-updated-translations-for-XX.patch" which contains  your changes, ready
for   sending.   The   goal   will   now  be   to   email   this   file   to
<wmaker-dev@googlegroups.com>. If you feel confident in having 'git' send it
for you, you may want  to read the file "The-perfect-Window-Maker-patch.txt"
to see how to configure 'git' for mailing, so you can run:

     git send-email 0001-updated-translations-for-XX.patch
