εκκίνηση εφαρμογής σε διαφορετική γλώσσα από αυτή του περιβάλλοντος

Giorgos Keramidas keramida at ceid.upatras.gr
Thu Mar 13 03:45:04 EET 2008


On 2008-03-12 23:36, Thanos <pampo at freemail.gr> wrote:
> Χαίρετε...
> 
> Είχα την εντύπωση πως δίνοντας κάτι σαν το...
> 
> 	LANG=en_US.UTF-8 application_command
> ή το...
> 	LC_MESSAGES=en_US.UTF-8 application_command
> 
> ...μπορείς να τρέξεις μια εφαρμογή με αγγλικό μενού αν π.χ. το υπόλοιπο 
> περιβάλλον είναι στα ελληνικά.

Καλά το πας.  Απλά μπορεί να μην είναι αρκετό αυτό.

Για παράδειγμα αν υπάρχει ήδη LC_ALL στο τρέχον environment, μπορεί να
υπερισχύει του LC_MESSAGES που έφτιαξες (συχνό `bug' σε scripts που έχω
δει να σκάνε με UTF-8 errors σε build servers που νομίζουν ότι γράφουν
error messages σε απλό POSIX/C locale).

> Μάλλον όμως το παραπάνω ισχύει μόνο για κάποιο τύπο εφαρμογών (μήπως
> μόνο για GTK based; ), διότι χρησιμοποιώντας τα παραπάνω για την
> εκκίνηση του amarok με αγγλικό μενού δεν έχει κανένα αποτέλεσμα.
> 
> Πως μπορώ λοιπόν να τρέξω τον Amarok με αγγλικό μενού; Έχω Debian
> testing και XFCE.

Προσωπικά, χρησιμοποιώ mini shell-wrappers, σαν το παρακάτω:

    % cat -n ~/bin/utf-emacs
     1  #!/bin/sh
     2
     3  # Copyright (c) 2008 Giorgos Keramidas <keramida at FreeBSD.org>
     4  # All rights reserved.
     5  #
     6  # Redistribution and use in source and binary forms, with or without
     7  # modification, are permitted provided that the following conditions
     8  # are met:
     9  # 1. Redistributions of source code must retain the above copyright
    10  #    notice, this list of conditions and the following disclaimer.
    11  # 2. Redistributions in binary form must reproduce the above copyright
    12  #    notice, this list of conditions and the following disclaimer in the
    13  #    documentation and/or other materials provided with the distribution.
    14  #
    15  # THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
    16  # ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
    17  # IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
    18  # ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
    19  # FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
    20  # DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
    21  # OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
    22  # HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
    23  # LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
    24  # OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
    25  # SUCH DAMAGE.
    26
    27  # First clear any locale-related environment vars.
    28  unset LANG `env | grep '^LC_' | cut -d= -f1`
    29
    30  # Then set the preferred locale variables for UTF-8 text.
    31  export LANG='el_GR.UTF-8'
    32  export LC_ALL='el_GR.UTF-8'
    33
    34  # Finally, try to fire up some version of Emacs.
    35  # The first one that works will terminate this script.
    36  test -x /opt/emacs/bin/emacs       && exec /opt/emacs/bin/emacs "$@"
    37  test -x /usr/local/bin/emacs       && exec /usr/local/bin/emacs "$@"
    38  test -x /usr/bin/emacs             && exec /usr/bin/emacs "$@"
    39
    40  echo >&2 "utf-emacs: no Emacs installation found."
    41  exit 1
    %

Η διαφορά με αυτό που έγραψες εσύ είναι οι γραμμές 27-32.  Πρώτα κάνω
_unset_ οτιδήποτε έχει σχέση με locales, και ύστερα ρυθμίζω ακριβώς αυτό
που θέλω.

Το καλό με το να είναι shell script, είναι ότι τρέχει σε subprocess από
το ενεργό shell μου.  Οπότε το unset δεν επηρεάζει σε τίποτα το parent
shell, κι όλοι είναι χαρούμενοι :)




More information about the Linux-greek-users mailing list