wpml-string-translation
WPML: string registration & translation
For free-form / dynamic strings your plugin emits that WPML can't reach otherwise — option values entered in your settings, admin-defined labels, messages built at runtime. Static UI text stays on normal WordPress i18n (__(), _e() + .po/.mo); this skill is only for strings that live in the database or are generated dynamically.
Read this first — it needs the String Translation add-on
The base plugin only FIRES the string hooks; the handlers that actually store and translate strings ship with the separate WPML String Translation add-on. Verified: there is no add_action('wpml_register_single_string', …) or add_filter('wpml_translate_single_string', …) anywhere in sitepress-multilingual-cms, and icl_register_string / icl_t / icl_gettext are not defined in the base plugin.
Standard WordPress hook semantics then give you a safe default only for the hook form:
apply_filters('wpml_translate_single_string', $value, …)with no handler → returns$valueunchanged (original text; safe fallback).do_action('wpml_register_single_string', …)with no handler → silent no-op.icl_register_string()/icl_t()called directly with ST inactive → fatalundefined functionunless guarded.
So: prefer the hook form (degrades safely), and if you use the legacy icl_* functions, guard every call with function_exists().