posthog-js
Version:
Posthog-js allows you to automatically capture usage and send events to PostHog.
52 lines • 2.5 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.detectUserLanguage = detectUserLanguage;
exports.applySurveyTranslationForUser = applySurveyTranslationForUser;
var constants_1 = require("../constants");
var logger_1 = require("@posthog/browser-common/utils/logger");
var event_utils_1 = require("@posthog/browser-common/utils/event-utils");
var core_1 = require("@posthog/core");
var surveys_1 = require("@posthog/core/surveys");
var logger = (0, logger_1.createLogger)('[SurveyTranslations]');
/**
* Detects the user's language using priority order:
* 1. config.override_display_language (explicit override)
* 2. person properties 'language' (allows programmatic control via posthog.identify())
* 3. navigator.language (browser language)
*
* TODO: Consider adding dynamic language change detection in the future:
* - Listen to 'languagechange' event on window (https://developer.mozilla.org/en-US/docs/Web/API/Window/languagechange_event)
* - Listen to config changes (once we add config change events to PostHog core)
* - Re-render survey when language changes mid-session
*
* @param instance - PostHog instance to retrieve config and person properties
* @returns The detected language code (e.g., 'fr', 'es', 'en-US') or null if not found
*/
function detectUserLanguage(instance) {
return (0, surveys_1.detectSurveyLanguage)({
overrideLanguage: instance.config.override_display_language,
storedPersonProperties: (0, core_1.isFunction)(instance.get_property)
? instance.get_property(constants_1.STORED_PERSON_PROPERTIES_KEY)
: undefined,
locale: (0, event_utils_1.getBrowserLanguage)(),
}, logger);
}
/**
* Applies translations to a survey based on the user's language from person properties
* @param survey - The original survey object
* @param instance - PostHog instance to retrieve person properties
* @returns An object containing the translated survey and the language used (or null if no translation applied)
*/
function applySurveyTranslationForUser(survey, instance) {
var userLanguage = detectUserLanguage(instance);
if (!userLanguage) {
logger.info('No user language detected');
return { survey: survey, language: null };
}
var result = (0, surveys_1.applySurveyTranslation)(survey, userLanguage, logger);
return {
survey: result.survey,
language: result.matchedKey,
};
}
//# sourceMappingURL=survey-translations.js.map