Create an account

Very important

  • To access the important data of the forums, you must be active in each forum and especially in the leaks and database leaks section, send data and after sending the data and activity, data and important content will be opened and visible for you.
  • You will only see chat messages from people who are at or below your level.
  • More than 500,000 database leaks and millions of account leaks are waiting for you, so access and view with more activity.
  • Many important data are inactive and inaccessible for you, so open them with activity. (This will be done automatically)


Thread Rating:
  • 556 Vote(s) - 3.67 Average
  • 1
  • 2
  • 3
  • 4
  • 5
Polylang: How to translate custom strings?

#1
**My problem**: I'm translating my website using Polylang but I'm having a hard time with custom strings translation. The strings won't show up in the "Strings translation" menu in the WP dashboard.

**Important:** I don't know much about PHP so the *pll_register_string function* is very confusing for me.


Quoted from the Polylang doc:

[To see links please register here]


> **pll_register_string**
>
> Allows plugins to add their own strings in the “strings translation”
> panel. The function must be called on admin side (the functions.php
> file is OK for themes). It is possible to register empty strings (for
> example when they come from options) but they won’t appear in the list
> table.
>
> Usage:
>
> pll_register_string($name, $string, $group, $multiline); ‘$name’ =>
> (required) name provided for sorting convenience (ex: ‘myplugin’)
> ‘$string’ => (required) the string to translate ‘$group’ => (optional)
> the group in which the string is registered, defaults to ‘polylang’
> ‘$multiline’ => (optional) if set to true, the translation text field
> will be multiline, defaults to false
>
> **pll__**
>
> translates a string previously registered with pll_register_string
> Usage:
>
> pll__($string); The unique parameter is required:
>
> ‘$string’ => the string to translate returns the translated string.
>
> **pll_e**
>
> Echoes a translated string previously registered with
> pll_register_string Usage:
>
> pll_e($string); The unique parameter is required:
>
> ‘$string’ => the string to transla


Best regards
Reply

#2
You must first register all these strings for translation.

For example you echo "Hello world" in some template file like this:

<?php pll_e('Hello world'); ?>

To show string in the "Strings translation" add in your `functions.php`:

add_action('init', function() {
pll_register_string('mytheme-hello', 'Hello world');
});

Add all custom strings you want to translate to this function.
Reply

#3
As Polylang [docs][1] says it's good to check polylang functions for existance first - so site will not break upon Polylang plugin update - because it removes old files first.

So i propose this approach:
in `functions.php`for theme of in your plugin's file, you can create wrappers for needed Polylang functions with fallbacks if polylang was removed, or updated so WP will not crash with undefined function error.

/**
* Outputs localized string if polylang exists or output's not translated one as a fallback
*
* @param $string
*
* @return void
*/
function pl_e( $string = '' ) {
if ( function_exists( 'pll_e' ) ) {
pll_e( $string );
} else {
echo $string;
}
}

/**
* Returns translated string if polylang exists or output's not translated one as a fallback
*
* @param $string
*
* @return string
*/
function pl__( $string = '' ) {
if ( function_exists( 'pll__' ) ) {
return pll__( $string );
}

return $string;
}

// these function prefixes can be either you are comfortable with.


NOTE we've created functions with single `l` in `pl__` and `pl_e` and original Polylang functions are `pll__` and `pll_e`.

These will be used in your theme to output or return translated strings.

And as mentioned before we must register these strings so Polylang will know that these should be translated.

If you work with theme probably it's good to initialize them in `after_setup_theme` hook like this:

function your_prefix_after_setup_theme() {

// register our translatable strings - again first check if function exists.

if ( function_exists( 'pll_register_string' ) ) {

pll_register_string( 'ToggleNavigation', 'Toggle navigation', 'YourThemeName', false );

pll_register_string( 'ToggleSearch', 'Toggle Search', 'YourThemeName', false );

pll_register_string('404Message', 'It looks like nothing was found. Try getting back to the <a href="%s">home page</a>.', 'YourThemeName', true);

}
}
add_action( 'after_setup_theme', 'your_prefix_after_setup_theme' );


[1]:

[To see links please register here]

Reply

#4
Thank you for this!
I add this setup and then i found another trick somewhere else to add my translatable text in the functions.php file:

__(pll__('string to translate'), 'text-domain')

Reply

#5
Hi there any way to translate using the name ?

add_action('init', function() {
pll_register_string('footer-Newsletter-form', 'Subscribe to Newsletter');
});

$translated_string = pll_translate_string('footer-Newsletter-form', $lang);
Reply



Forum Jump:


Users browsing this thread:
1 Guest(s)

©0Day  2016 - 2023 | All Rights Reserved.  Made with    for the community. Connected through