]>
git.ipfire.org Git - thirdparty/cups.git/blob - cups/localize.c
2 * "$Id: localize.c 6388 2007-03-24 14:21:31Z mike $"
4 * PPD custom option routines for the Common UNIX Printing System (CUPS).
6 * Copyright 1997-2007 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.
63 int /* O - 0 on success, -1 on error */
64 ppdLocalize(ppd_file_t
*ppd
) /* I - PPD file */
66 int i
, j
, k
; /* Looping vars */
67 ppd_group_t
*group
; /* Current group */
68 ppd_option_t
*option
; /* Current option */
69 ppd_choice_t
*choice
; /* Current choice */
70 ppd_coption_t
*coption
; /* Current custom option */
71 ppd_cparam_t
*cparam
; /* Current custom parameter */
72 ppd_attr_t
*attr
; /* Current attribute */
73 cups_lang_t
*lang
; /* Current language */
74 char ckeyword
[PPD_MAX_NAME
], /* Custom keyword */
75 ll_CC
[6], /* Language + country locale */
76 ll
[3]; /* Language locale */
77 const char *text
; /* Localized text */
81 * Range check input...
84 DEBUG_printf(("ppdLocalize(ppd=%p)\n", ppd
));
90 * Get the default language...
93 if ((lang
= cupsLangDefault()) == NULL
)
96 strlcpy(ll_CC
, lang
->language
, sizeof(ll_CC
));
97 strlcpy(ll
, lang
->language
, sizeof(ll
));
99 DEBUG_printf((" lang->language=\"%s\", ll=\"%s\", ll_CC=\"%s\"...\n",
100 lang
->language
, ll
, ll_CC
));
103 * Now lookup all of the groups, options, choices, etc.
106 for (i
= ppd
->num_groups
, group
= ppd
->groups
; i
> 0; i
--, group
++)
108 if ((text
= ppd_text(ppd
, "Translation", group
->name
, ll_CC
, ll
)) != NULL
)
109 strlcpy(group
->text
, text
, sizeof(group
->text
));
111 for (j
= group
->num_options
, option
= group
->options
; j
> 0; j
--, option
++)
113 if ((text
= ppd_text(ppd
, "Translation", option
->keyword
, ll_CC
,
115 strlcpy(option
->text
, text
, sizeof(option
->text
));
117 for (k
= option
->num_choices
, choice
= option
->choices
;
121 if (strcmp(choice
->choice
, "Custom"))
122 text
= ppd_text(ppd
, option
->keyword
, choice
->choice
, ll_CC
, ll
);
125 snprintf(ckeyword
, sizeof(ckeyword
), "Custom%s", option
->keyword
);
127 text
= ppd_text(ppd
, ckeyword
, "True", ll_CC
, ll
);
131 strlcpy(choice
->text
, text
, sizeof(choice
->text
));
137 * Translate any custom parameters...
140 for (coption
= (ppd_coption_t
*)cupsArrayFirst(ppd
->coptions
);
142 coption
= (ppd_coption_t
*)cupsArrayNext(ppd
->coptions
))
144 for (cparam
= (ppd_cparam_t
*)cupsArrayFirst(coption
->params
);
146 cparam
= (ppd_cparam_t
*)cupsArrayNext(coption
->params
))
148 snprintf(ckeyword
, sizeof(ckeyword
), "ParamCustom%s", coption
->keyword
);
150 if ((text
= ppd_text(ppd
, ckeyword
, cparam
->name
, ll_CC
, ll
)) != NULL
)
151 strlcpy(cparam
->text
, text
, sizeof(cparam
->text
));
156 * Translate ICC profile names...
159 if ((attr
= ppdFindAttr(ppd
, "APCustomColorMatchingName", NULL
)) != NULL
)
161 if ((text
= ppd_text(ppd
, "APCustomColorMatchingName", attr
->spec
,
163 strlcpy(attr
->text
, text
, sizeof(attr
->text
));
166 for (attr
= ppdFindAttr(ppd
, "cupsICCProfile", NULL
);
168 attr
= ppdFindNextAttr(ppd
, "cupsICCProfile", NULL
))
170 cupsArraySave(ppd
->sorted_attrs
);
172 if ((text
= ppd_text(ppd
, "cupsICCProfile", attr
->spec
, ll_CC
, ll
)) != NULL
)
173 strlcpy(attr
->text
, text
, sizeof(attr
->text
));
175 cupsArrayRestore(ppd
->sorted_attrs
);
183 * 'ppd_text()' - Find the localized text as needed...
186 static const char * /* O - Localized text or NULL */
187 ppd_text(ppd_file_t
*ppd
, /* I - PPD file */
188 const char *keyword
, /* I - Main keyword */
189 const char *spec
, /* I - Option keyword */
190 const char *ll_CC
, /* I - Language + country locale */
191 const char *ll
) /* I - Language locale */
193 char lkeyword
[PPD_MAX_NAME
]; /* Localization keyword */
194 ppd_attr_t
*attr
; /* Current attribute */
197 DEBUG_printf(("ppd_text(ppd=%p, keyword=\"%s\", spec=\"%s\", "
198 "ll_CC=\"%s\", ll=\"%s\")\n",
199 ppd
, keyword
, spec
, ll_CC
, ll
));
202 * Look for Keyword.ll_CC, then Keyword.ll...
205 snprintf(lkeyword
, sizeof(lkeyword
), "%s.%s", ll_CC
, keyword
);
206 if ((attr
= ppdFindAttr(ppd
, lkeyword
, spec
)) == NULL
)
208 snprintf(lkeyword
, sizeof(lkeyword
), "%s.%s", ll
, keyword
);
209 attr
= ppdFindAttr(ppd
, lkeyword
, spec
);
211 if (!attr
&& !strcmp(ll
, "ja"))
214 * Due to a bug in the CUPS DDK 1.1.0 ppdmerge program, Japanese
215 * PPD files were incorrectly assigned "jp" as the locale name
216 * instead of "ja". Support both the old (incorrect) and new
217 * locale names for Japanese...
220 snprintf(lkeyword
, sizeof(lkeyword
), "jp.%s", keyword
);
221 attr
= ppdFindAttr(ppd
, lkeyword
, spec
);
227 printf(" *%s %s/%s: \"%s\"\n", attr
->name
, attr
->spec
, attr
->text
,
228 attr
->value
? attr
->value
: "");
234 * Return text if we find it...
237 return (attr
? attr
->text
: NULL
);
242 * End of "$Id: localize.c 6388 2007-03-24 14:21:31Z mike $".