I can』t add media when editing a post

I can』t add media when editing a post

Case 1: You activated the languages and translations for the media.
When editing a post, only the media in the same language as the post you are editing are visible in the media library. You must translate your media in the post』s language.
Case 2: You deactivated the languages and translations for the media.
If you previously uploaded media while the language and translation for media was active, they will keep their language and won』t be visible in other languages.
Thus, as explained in the media documentation, it is not recommended to change the media setting once you started to work with media.

How to display the widget flags horizontally?

How to display the widget flags horizontally?

The appearance of your site is controlled by CSS rules placed in the file style.css in your theme directory. The appearance of the language switcher is controlled by the classes 「lang-item」 for all languages and 「current-lang-item」 for the current language.
So you can add the following lines in style.css
123.lang-item {  display: inline;}
The topic was also discussed on the support forum: Flags vs. Text Links in widget

A widget has no multilingual capability

A widget has no multilingual capability

WordPress 2.8 introduced a new widget API. Polylang is compatible with this API. Any widget which is compatible with older versions of WordPress should still work but will have no multilingual capability (no possibility to display it in only one language, no possibility to translate the widget title). Of course, all default widgets are supported by Polylang.

I activated Polylang and my posts, my categories are not displayed anymore

I activated Polylang and my posts, my categories are not displayed anymore

When installing Polylang or Polylang Pro using the Setup Wizard, you should have been requested to select one or more languages  and assigned one of these languages to your content (see screenshots below). If you skipped this step, then no language was assigned to your existing content causing some unwanted behaviors such as posts or categories appearing to have disappeared.

Why?
If your posts / pages / categories and post tags are without a language they will not pass the language filter and won』t be displayed on the front-end, therefore you MUST define a language.
How can I solve this?

You can run the Wizard from the Languages menu => Setup sub-menu or by clicking on the button which may still be visible on most admin pages.  See our documentation Setup Wizard.
Or assign a language to your content post installation by clicking on the link 「You can set them all to the default language」 as shown in the gif below. If your current content is in English for example, choose English as default language and by clicking on the link available in your languages page, English will be assigned to all your existing content.

Widget titles are not listed in the strings translation table

Widget titles are not listed in the strings translation table

If you enter a title in the widget options and this title is not listed in the translation table, it is most likely because the widget uses the very old Widget API (WP < 2.8). Obviously the advantage for the widget is to be compatible with WordPress older than 2.8 but unfortunately, there is no way to make Polylang automatically compatible with all widgets which use this old API.
It is however possible to make them compatible for people who have some PHP skills, using the Polylang API functions 『pll_register_string』 and 『pll__』.

The title attribute displays the html code of the flag

The title attribute displays the html code of the flag

Polylang intentionally keeps the title attribute empty for the language switcher. As this field is empty some themes copy the navigation label in this attribute. It』s a bad practice as it doesn』t add any useful information and the title can contains only text whereas the navigation label can include images.
Of course, the default WordPress Twenty themes haven』t such issue. Please ask to your theme support how to solve this. A quick fix is to remove the flags in the language switcher options.

WPML API

WPML API

The WordPress multilingual plugin WPML has been created far before Polylang and thus some plugins and themes have been written to play nicely with it. Polylang does support most of the WPML API to avoid double work for themes and plugins author. WPML 3.2 introduced a new API based on filters and actions rather than functions. It is not supported yet.
The constants ICL_LANGUAGE_CODE and ICL_LANGUAGE_NAME are supported.
icl_get_home_url
Polylang equivalent: pll_home_url
Link to the home page in the active language.
Usage:
1icl_get_home_url();
icl_get_languages
Polylang equivalent: none
Used for building custom language selectors
Usage:
1icl_get_languages($args);
$args is an optional array parameter. Options are:

『orderby』 => 『slug』, 『name』 or 『id』 (default: 『id』)
『order』 => 『DESC』 or 『ASC』 (default: 『ASC』)
『skip_missing』 => 0 or 1 (default: 0)
link_empty_to => works in conjunction with skip_missing=0 and allows using custom links for the languages that do not have translations for the current element. {$lang} can be used as placeholder for the language code (default: empty)

icl_link_to_element
Polylang equivalent: none
used for creating language dependent links
Usage:
1icl_link_to_element($id, $type, $text, $args, $anchor);

$id => (required) the ID of the post, page, tag or category to link to
$type => (optional) the type of page to link to. Can be 『post』, 『page』, 『tag』 or 『category』. (default: 『post』)
$text => (optional) the link text. If not specified, the name of the element will be used.
$args => (optional) arguments for the link. When used, this should be a PHP array
$anchor => (optional) anchor for the link

icl_object_id
Polylang equivalent: pll_get_post and pll_get_term
returns the tranlation id of an object
Usage:
1icl_object_id($id, $type, $return_original_if_missing, $lang);

$id => (required) the ID of the post, page, tag or category
$type => (required) 『post』, 『page』, post_tag』 or 『category』.
$return_original_if_missing => (required) true if Polylang should return the ID of the original language element if the translation is missing or false if Polylang should return a NULL if translation is missing
$lang => (optional) if set, forces the language of the returned object and can be different than the displayed language

icl_register_string
Polylang equivalent: pll_register_string
Allows plugins to add their own strings in the 「strings translation」 panel. Unlike pll_register_string, icl_register_string stores the string in the database (as the WPML original function does).
Usage:
1icl_register_string($context, $name, $string);

$context => (required) the name of the plugin
$name => (required) the name of the string
$string => (required) the string that needs to be translated

icl_unregister_string
Polylang equivalent: none
Removes a string from the database
Usage:
1icl_unregister_string($context, $name);

$context => (required) the name of the plugin
$name => (required) the name of the string

icl_t
Polylang equivalent: pll__
get the translated string
Usage:
1icl_t($context, $name, $string);

$context => (required) the name of the plugin
$name => (required) the name of the string
$string => (optional) the string that needs to be translated

Can I use my own flags for the language switcher?

Can I use my own flags for the language switcher?

Yes. You can use PNG, JPG or even SVG files and name them with the WordPress locale. For example, en_US.png.
Upload these files in the /wp-content/polylang/ directory.
Note: You have to create the directory yourself. Don』t use the /polylang/flags/ directory as your files would be removed when automatically updating the plugin. Alternatively, it』s possible to store the files in the /polylang/ subdirectory of the theme or the child theme.
Once the custom flags are uploaded, go to Languages > Settings. Click on the 「URL modifications」 settings and then on Save Changes.
Note: To specify the height and widh of SVG flags, you need to use the PHP filter pll_custom_flag.
Note: Your custom flags won』t be used on admin side. You can change them only with the PHP filter pll_flag.