mirror of
https://github.com/ansible/awx.git
synced 2026-05-19 14:57:39 -02:30
Adds support for a pseudolocalization and lang query params (#13661)
* Adds support for a pseudolocalization query param to check to see whether a string has been marked for translation Adds support for a pseudolocalization query param to check to see whether a string has been marked for translation * Adds support for passing a lang param to force rendering in a particular language * Remove unused import
This commit is contained in:
@@ -28,7 +28,7 @@ import { getLanguageWithoutRegionCode } from 'util/language';
|
|||||||
import Metrics from 'screens/Metrics';
|
import Metrics from 'screens/Metrics';
|
||||||
import SubscriptionEdit from 'screens/Setting/Subscription/SubscriptionEdit';
|
import SubscriptionEdit from 'screens/Setting/Subscription/SubscriptionEdit';
|
||||||
import useTitle from 'hooks/useTitle';
|
import useTitle from 'hooks/useTitle';
|
||||||
import { dynamicActivate, locales } from './i18nLoader';
|
import { dynamicActivate } from './i18nLoader';
|
||||||
import getRouteConfig from './routeConfig';
|
import getRouteConfig from './routeConfig';
|
||||||
import { SESSION_REDIRECT_URL } from './constants';
|
import { SESSION_REDIRECT_URL } from './constants';
|
||||||
|
|
||||||
@@ -139,16 +139,15 @@ export function ProtectedRoute({ children, ...rest }) {
|
|||||||
function App() {
|
function App() {
|
||||||
const history = useHistory();
|
const history = useHistory();
|
||||||
const { hash, search, pathname } = useLocation();
|
const { hash, search, pathname } = useLocation();
|
||||||
let language = getLanguageWithoutRegionCode(navigator);
|
const searchParams = Object.fromEntries(new URLSearchParams(search));
|
||||||
if (!Object.keys(locales).includes(language)) {
|
const pseudolocalization =
|
||||||
// If there isn't a string catalog available for the browser's
|
searchParams.pseudolocalization === 'true' || false;
|
||||||
// preferred language, default to one that has strings.
|
const language =
|
||||||
language = 'en';
|
searchParams.lang || getLanguageWithoutRegionCode(navigator) || 'en';
|
||||||
}
|
|
||||||
|
|
||||||
useEffect(() => {
|
useEffect(() => {
|
||||||
dynamicActivate(language);
|
dynamicActivate(language, pseudolocalization);
|
||||||
}, [language]);
|
}, [language, pseudolocalization]);
|
||||||
|
|
||||||
useTitle();
|
useTitle();
|
||||||
|
|
||||||
|
|||||||
@@ -27,8 +27,21 @@ i18n.loadLocaleData({
|
|||||||
* We do a dynamic import of just the catalog that we need
|
* We do a dynamic import of just the catalog that we need
|
||||||
* @param locale any locale string
|
* @param locale any locale string
|
||||||
*/
|
*/
|
||||||
export async function dynamicActivate(locale) {
|
export async function dynamicActivate(locale, pseudolocalization = false) {
|
||||||
const { messages } = await import(`./locales/${locale}/messages`);
|
const { messages } = await import(`./locales/${locale}/messages`);
|
||||||
|
|
||||||
|
if (pseudolocalization) {
|
||||||
|
Object.keys(messages).forEach((key) => {
|
||||||
|
if (Array.isArray(messages[key])) {
|
||||||
|
// t`Foo ${param}` -> ["Foo ", ['param']] => [">>", "Foo ", ['param'], "<<"]
|
||||||
|
messages[key] = ['»', ...messages[key], '«'];
|
||||||
|
} else {
|
||||||
|
// simple string
|
||||||
|
messages[key] = `»${messages[key]}«`;
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
i18n.load(locale, messages);
|
i18n.load(locale, messages);
|
||||||
i18n.activate(locale);
|
i18n.activate(locale);
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user