@@ -29,6 +29,63 @@ public static function render(array $fields): void {
2929 Menu::render_top_menu ($ fields );
3030 }
3131
32+ /**
33+ * Generate the URL with query to change the UI language
34+ * @param language - language tag to use
35+ */
36+ private static function change_ui_language ($ language ): string {
37+ // Parse the current URI for populating the UI dropdown
38+ $ url = isset ($ _SERVER ['REQUEST_URI ' ]) ? $ _SERVER ['REQUEST_URI ' ] : '/ ' ;
39+ $ parts = parse_url ($ url );
40+
41+ if (!empty ($ parts ['query ' ])) {
42+ parse_str ($ parts ['query ' ], $ queryParams );
43+ } else {
44+ $ queryParams = [];
45+ }
46+
47+ // Set the language query
48+ $ queryParams ['lang ' ] = $ language ;
49+ $ query = http_build_query ($ queryParams );
50+
51+ return $ parts ['path ' ] . "? " . $ query ;
52+ }
53+
54+ /**
55+ * Render the globe dropdown for changing the UI language
56+ * As UI languages get added, we'll need to update this.
57+ * Limitation: Currently only visible on pages that use localized strings
58+ * @param number - Div number, default 0.
59+ */
60+ private static function render_globe_dropdown ($ number = 0 ): void {
61+ global $ page_is_using_locale ;
62+ if (!isset ($ page_is_using_locale ) || !$ page_is_using_locale ) {
63+ // only render on pages that use localized strings
64+ return ;
65+ }
66+
67+ $ divID = ($ number == 1 ) ? "ui-language1 " : "ui-language " ;
68+ echo <<<END
69+ <p>
70+ <div id=' $ divID' class="menu-item">
71+ END ;
72+ ?>
73+ <img src="<?php echo Util::cdn ("img/globe.png " ); ?> " alt="UI globe dropdown" />
74+ <div class="menu-item-dropdown">
75+ <div class="menu-dropdown-inner">
76+ <ul>
77+ <!-- Just use autonyms -->
78+ <li><a href="<?= Menu::change_ui_language ('en ' ); ?> ">English</a></li>
79+ <li><a href="<?= Menu::change_ui_language ('es ' ); ?> ">Español</a></li>
80+ <li><a href="<?= Menu::change_ui_language ('fr ' ); ?> ">Français</a></li>
81+ </ul>
82+ </div>
83+ </div>
84+ </div>
85+ </p>
86+ <?php
87+ }
88+
3289 private static function render_phone_menu (object $ fields ): void {
3390?>
3491
@@ -117,6 +174,9 @@ private static function render_top_menu(object $fields): void {
117174 </form>
118175 <p id="donate"><a href="/donate">Donate</a></p>
119176 <p><a href="<?= KeymanHosts::Instance ()->help_keyman_com ?> " target="blank">Support<img src="<?php echo Util::cdn ("img/helpIcon.png " ); ?> " alt="help icon"></a></p>
177+ <?php
178+ Menu::render_globe_dropdown ();
179+ ?>
120180 </div>
121181 </div>
122182 <div id="top-menu-bg"></div>
@@ -132,6 +192,9 @@ private static function render_top_menu(object $fields): void {
132192 </form>
133193 <a id='help1-donate' href="/donate">Donate</a>
134194 <a href="<?= KeymanHosts::Instance ()->help_keyman_com ?> "><img id="top-menu-icon2" src="<?php echo Util::cdn ("img/helpIcon.png " ); ?> " alt="help icon" /></a>
195+ <?php
196+ Menu::render_globe_dropdown (1 );
197+ ?>
135198 </div>
136199 <div class="wrapper">
137200 <div class="menu-item" id="keyboards">
0 commit comments