]>
git.ipfire.org Git - thirdparty/cups.git/blob - cups/localize.c
2 * "$Id: localize.c 4937 2006-01-17 04:03:22Z mike $"
4 * PPD custom option routines for the Common UNIX Printing System (CUPS).
6 * Copyright 1997-2006 by Easy Software Products, all rights reserved.
8 * These coded instructions, statements, and computer programs are the
9 * property of Easy Software Products and are protected by Federal
10 * copyright law. Distribution and use rights are outlined in the file
11 * "LICENSE.txt" which should have been included with this file. If this
12 * file is missing or damaged please contact Easy Software Products
15 * Attn: CUPS Licensing Information
16 * Easy Software Products
17 * 44141 Airport View Drive, Suite 204
18 * Hollywood, Maryland 20636 USA
20 * Voice: (301) 373-9600
21 * EMail: cups-info@cups.org
22 * WWW: http://www.cups.org
24 * PostScript is a trademark of Adobe Systems, Inc.
26 * This code and any derivative of it may be used and distributed
27 * freely under the terms of the GNU General Public License when
28 * used with GNU Ghostscript or its derivatives. Use of the code
29 * (or any derivative of it) with software other than GNU
30 * GhostScript (or its derivatives) is governed by the CUPS license
33 * This file is subject to the Apple OS-Developed Software exception.
37 * ppdLocalize() - Localize the PPD file to the current locale.
41 * Include necessary headers.
52 static const char *ppd_text(ppd_file_t
*ppd
, const char *keyword
,
53 const char *spec
, const char *ll_CC
,
58 * 'ppdLocalize()' - Localize the PPD file to the current locale.
61 int /* O - 0 on success, -1 on error */
62 ppdLocalize(ppd_file_t
*ppd
) /* I - PPD file */
64 int i
, j
, k
; /* Looping vars */
65 ppd_group_t
*group
; /* Current group */
66 ppd_option_t
*option
; /* Current option */
67 ppd_choice_t
*choice
; /* Current choice */
68 ppd_coption_t
*coption
; /* Current custom option */
69 ppd_cparam_t
*cparam
; /* Current custom parameter */
70 cups_lang_t
*lang
; /* Current language */
71 char ckeyword
[PPD_MAX_NAME
], /* Custom keyword */
72 ll_CC
[6], /* Language + country locale */
73 ll
[3]; /* Language locale */
74 const char *text
; /* Localized text */
78 * Range check input...
85 * Get the default language...
88 if ((lang
= cupsLangDefault()) == NULL
)
91 strlcpy(ll_CC
, lang
->language
, sizeof(ll_CC
));
92 strlcpy(ll
, lang
->language
, sizeof(ll
));
95 * Now lookup all of the groups, options, choices, etc.
98 for (i
= ppd
->num_groups
, group
= ppd
->groups
; i
> 0; i
--, group
++)
100 if ((text
= ppd_text(ppd
, "Translation", group
->name
, ll_CC
, ll
)) != NULL
)
101 strlcpy(group
->text
, text
, sizeof(group
->text
));
103 for (j
= group
->num_options
, option
= group
->options
; j
> 0; j
--, option
++)
105 if ((text
= ppd_text(ppd
, "Translation", option
->keyword
, ll_CC
,
107 strlcpy(option
->text
, text
, sizeof(option
->text
));
109 for (k
= option
->num_choices
, choice
= option
->choices
;
113 if (strcmp(choice
->choice
, "Custom"))
114 text
= ppd_text(ppd
, option
->keyword
, choice
->choice
, ll_CC
, ll
);
117 snprintf(ckeyword
, sizeof(ckeyword
), "Custom%s", option
->keyword
);
119 text
= ppd_text(ppd
, ckeyword
, "True", ll_CC
, ll
);
123 strlcpy(choice
->text
, text
, sizeof(choice
->text
));
129 * Translate any custom parameters...
132 for (coption
= (ppd_coption_t
*)cupsArrayFirst(ppd
->coptions
);
134 coption
= (ppd_coption_t
*)cupsArrayNext(ppd
->coptions
))
136 for (cparam
= (ppd_cparam_t
*)cupsArrayFirst(coption
->params
);
138 cparam
= (ppd_cparam_t
*)cupsArrayNext(coption
->params
))
140 snprintf(ckeyword
, sizeof(ckeyword
), "ParamCustom%s", coption
->keyword
);
142 if ((text
= ppd_text(ppd
, ckeyword
, cparam
->name
, ll_CC
, ll
)) != NULL
)
143 strlcpy(cparam
->text
, text
, sizeof(cparam
->text
));
152 * 'ppd_text()' - Find the localized text as needed...
155 static const char * /* O - Localized text or NULL */
156 ppd_text(ppd_file_t
*ppd
, /* I - PPD file */
157 const char *keyword
, /* I - Main keyword */
158 const char *spec
, /* I - Option keyword */
159 const char *ll_CC
, /* I - Language + country locale */
160 const char *ll
) /* I - Language locale */
162 char lkeyword
[PPD_MAX_NAME
]; /* Localization keyword */
163 ppd_attr_t
*attr
; /* Current attribute */
167 * Look for Keyword.ll_CC, then Keyword.ll...
170 snprintf(lkeyword
, sizeof(lkeyword
), "%s.%s", keyword
, ll_CC
);
171 if ((attr
= ppdFindAttr(ppd
, lkeyword
, spec
)) == NULL
)
173 snprintf(lkeyword
, sizeof(lkeyword
), "%s.%s", keyword
, ll
);
174 attr
= ppdFindAttr(ppd
, lkeyword
, spec
);
178 * Return text if we find it...
181 return (attr
? attr
->text
: NULL
);
186 * End of "$Id: localize.c 4937 2006-01-17 04:03:22Z mike $".