2 Language related HII Library implementation.
4 Copyright (c) 2006, Intel Corporation<BR>
5 All rights reserved. This program and the accompanying materials
6 are licensed and made available under the terms and conditions of the BSD License
7 which accompanies this distribution. The full text of the license may be found at
8 http://opensource.org/licenses/bsd-license.php
10 THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
11 WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
16 #include "InternalHiiLib.h"
20 HiiLibGetCurrentLanguage (
27 ASSERT (Lang
!= NULL
);
30 // Get current language setting
32 Size
= RFC_3066_ENTRY_SIZE
;
33 Status
= gRT
->GetVariable (
35 &gEfiGlobalVariableGuid
,
41 if (EFI_ERROR (Status
)) {
42 AsciiStrCpy (Lang
, (CHAR8
*) PcdGetPtr (PcdUefiVariableDefaultPlatformLang
));
51 HiiLibGetNextLanguage (
52 IN OUT CHAR8
**LangCode
,
59 ASSERT (LangCode
!= NULL
);
60 ASSERT (Lang
!= NULL
);
63 StringPtr
= *LangCode
;
64 while (StringPtr
[Index
] != 0 && StringPtr
[Index
] != ';') {
68 CopyMem (Lang
, StringPtr
, Index
);
71 if (StringPtr
[Index
] == ';') {
74 *LangCode
= StringPtr
+ Index
;
80 HiiLibGetSupportedLanguages (
81 IN EFI_HII_HANDLE HiiHandle
86 CHAR8
*LanguageString
;
88 ASSERT (HiiHandle
!= NULL
);
89 ASSERT (IsHiiHandleRegistered (HiiHandle
));
91 // Collect current supported Languages for given HII handle
94 LanguageString
= AllocateZeroPool (BufferSize
);
95 if (LanguageString
== NULL
) {
99 LocateHiiProtocols ();
101 Status
= mHiiStringProt
->GetLanguages (mHiiStringProt
, HiiHandle
, LanguageString
, &BufferSize
);
103 if (Status
== EFI_BUFFER_TOO_SMALL
) {
104 gBS
->FreePool (LanguageString
);
105 LanguageString
= AllocateZeroPool (BufferSize
);
106 if (LanguageString
== NULL
) {
110 Status
= mHiiStringProt
->GetLanguages (mHiiStringProt
, HiiHandle
, LanguageString
, &BufferSize
);
113 if (EFI_ERROR (Status
)) {
114 LanguageString
= NULL
;
117 return LanguageString
;
123 HiiLibGetSupportedLanguageNumber (
124 IN EFI_HII_HANDLE HiiHandle
128 CHAR8
*LanguageString
;
130 CHAR8 Lang
[RFC_3066_ENTRY_SIZE
];
132 Languages
= HiiLibGetSupportedLanguages (HiiHandle
);
133 if (Languages
== NULL
) {
138 LanguageString
= Languages
;
139 while (*LanguageString
!= 0) {
140 HiiLibGetNextLanguage (&LanguageString
, Lang
);
143 gBS
->FreePool (Languages
);
150 HiiLibGetSupportedSecondaryLanguages (
151 IN EFI_HII_HANDLE HiiHandle
,
152 IN CONST CHAR8
*FirstLanguage
157 CHAR8
*LanguageString
;
159 ASSERT (HiiHandle
!= NULL
);
160 ASSERT (IsHiiHandleRegistered (HiiHandle
));
162 // Collect current supported 2nd Languages for given HII handle
165 LanguageString
= AllocateZeroPool (BufferSize
);
166 if (LanguageString
== NULL
) {
170 LocateHiiProtocols ();
172 Status
= mHiiStringProt
->GetSecondaryLanguages (mHiiStringProt
, HiiHandle
, FirstLanguage
, LanguageString
, &BufferSize
);
174 if (Status
== EFI_BUFFER_TOO_SMALL
) {
175 gBS
->FreePool (LanguageString
);
176 LanguageString
= AllocateZeroPool (BufferSize
);
177 if (LanguageString
== NULL
) {
181 Status
= mHiiStringProt
->GetSecondaryLanguages (mHiiStringProt
, HiiHandle
, FirstLanguage
, LanguageString
, &BufferSize
);
184 if (EFI_ERROR (Status
)) {
185 LanguageString
= NULL
;
188 return LanguageString
;