워드프레스 언어를 프로그래밍 방식으로 설정하시겠습니까?
Wordpress를 사용하는 사용자 기반 웹사이트를 가지고 있으며, 프로파일 설정에서 언어를 선택할 수 있으며, 이 정보 및 기타 설정은 user_meta의 모든 사용자에 대해 설정됩니다.
번역할 줄 아는데 주제어를 프로그래밍 방식으로 설정하는 방법은 없나요?
감사해요!
편집: 플러그인은 사용하지 마십시오. 가능한 한 간단하게 해야 합니다.
WP 4.7 이후 다음 기능을 사용할 수 있습니다.
switch_to_locale('en_US');
참고 자료: https://developer.wordpress.org/reference/functions/switch_to_locale/
다른 해결책을 찾았습니다.
// Set user selected language by loading the lang.mo file
if ( is_user_logged_in() ) {
// add local filter
add_filter('locale', 'language');
function language($locale) {
/* Note: user_meta and user_info are two functions made by me,
user_info will grab the current user ID and use it for
grabbing user_meta */
// grab user_meta "lang" value
$lang = user_meta(user_info('ID', false), 'lang', false);
// if user_meta lang is not empty
if ( !empty($lang) ) {
$locale = $lang; /* set locale to lang */
}
return $locale;
}
// load textdomain and .mo file if "lang" is set
load_theme_textdomain('theme-domain', TEMPLATEPATH . '/lang');
}
경유: http://codex.wordpress.org/Function_Reference/load_theme_textdomain
동일한 요청 범위 내에서 다른 언어로 된 플러그인에서 청구서를 생성해야 했기 때문에 다음과 같은 해결책을 생각해냈습니다.
global $locale;
$locale = 'en_CA';
load_plugin_textdomain('invoice', false, 'my-plugin/languages/');
generateInvoice(); // produce the English localized invoice
$locale = 'fr_CA';
load_plugin_textdomain('invoice', false, 'my-plugin/languages/');
generateInvoice(); // produce the French localized invoice
함수 호출의 선두에 있는 필터를 찾고 계신 것 같습니다.
예를 들어 다음과 같습니다.
function my_load_textdomain ($retval, $domain, $mofile) {
if ($domain != 'theme_domain')
return false;
$user = get_currentuserinfo()
$user_lang = get_user_lang($user);
if ($new_mofile = get_my_mofile($user_lang)) {
load_textdomain('theme_domain', $new_mofile);
return true;
}
return false;
}
add_filter('override_load_textdomain', 'my_load_textdomain');
뇌에서 키보드까지의 코드는 테스트되지 않았습니다.몇 가지 검증을 더 수행해야 합니다.
저는 이 두 가지 솔루션만 함께 사용할 수 있었습니다.
switch_to_locale($locale);
load_textdomain('example_domain', $mo_file_full_path);
A에도 같은 질문이 있어 다음과 같이 해결했습니다.
텍스트 도메인으로 .mo를 작성해야 합니다.loco translate 플러그인을 사용할 수 있습니다.https://br.wordpress.org/plugins/loco-translate/
.mo 파일을 링크하는 텍스트 도메인을 로드합니다.
load_textdomain('your_text_domain', '/your/file.mo');
후크를 통해 워드프레스 위치를 변경합니다.원하는 위치를 반환하는 함수를 만듭니다.Wordpress Locale Id를 사용하세요.모든 로케일 ID는 https://wpastra.com/docs/complete-list-wordpress-locale-codes/ 에서 확인할 수 있습니다.
함수를 씁니다.
function wpsx_redefine_locale($locale){
return 'ja';
}
add_filter('locale','wpsx_redefine_locale',10);
사용자 위치별로 변경할 수 있습니다.이러한 방식으로 워드프레스 세트는 사용자가 제어판에서 설정한 것과 동일한 언어를 사용합니다.
$user_locale = get_user_locale();
function wpsx_redefine_locale($locale){
global $user_locale;
return $user_locale;
}
add_filter('locale','wpsx_redefine_locale',10);
관찰: 내 워드프레스 버전은 5.7입니다.다른 버전에서는 이 방법을 사용할 수 없습니다.멋있다!
저도 비슷한 문제가 있어서 이렇게 해결했어요.
이 경우 사용자 로케일을 사용하여 로케일을 취득하려고 합니다.
$userLocale = get_user_locale($userObject->ID);
동적 로케일로 올바른 teme_textdomain을 로드하는 커스텀 함수를 만들었습니다.WP 함수와 거의 비슷하지만 로케일 변수를 추가할 수 있습니다.
/** * Loads text domain by custom locale * Based on a WP function, only change is the custom $locale * parameter so we can get translated strings on demand during runtime */ function load_theme_textdomain_custom_locale($domain, $path = false, $locale) { /** * Filter a theme's locale. * * @since 3.0.0 * * @param string $locale The theme's current locale. * @param string $domain Text domain. Unique identifier for retrieving translated strings. */ $locale = apply_filters('theme_locale', $locale, $domain); if (!$path) { $path = get_template_directory(); } // Load the textdomain according to the theme $mofile = "{$path}/{$locale}.mo"; if ($loaded = load_textdomain($domain, $mofile)) { return $loaded; } // Otherwise, load from the languages directory $mofile = WP_LANG_DIR . "/themes/{$domain}-{$locale}.mo"; return load_textdomain($domain, $mofile); }
기준: http://queryposts.com/function/load_theme_textdomain/
에 switch_to_locale을 .디버깅을 하면load_textdomain
error : / make of memory " " " " " / " /
언급URL : https://stackoverflow.com/questions/8236280/setting-wordpress-language-programmatically
'programing' 카테고리의 다른 글
슬라이더 이미지를 어둡게 하는 방법 (0) | 2023.02.07 |
---|---|
Wordpress가 URL의 유니코드 문자를 무시하고 있습니다. (0) | 2023.02.07 |
제품 상세 페이지의 WooCommerce에서 카테고리 ID별 카테고리 URL 가져오기 (0) | 2023.02.07 |
문제가 있는 Nginx 설정 (0) | 2023.02.07 |
Cognito 사용자 풀 및 Wordpress 사용자(AWS에서 Wordpress에 서명) (0) | 2023.02.07 |