Make WordPress Core

Opened 18 months ago

Closed 15 months ago

Last modified 15 months ago

#55941 closed defect (bug) (fixed)

Empty string wrongly translated to '0'

Reported by: chouby's profile Chouby Owned by: audrasjb's profile audrasjb
Milestone: 6.1 Priority: normal
Severity: normal Version: 2.8
Component: I18N Keywords: has-patch has-unit-tests
Focuses: Cc:

Description (last modified by sabernhardt)

I encountered a case where an empty string is translated to '0', when I expected it to be ''. This edge case is due to the translation file having the string '0', translated to '0'.

According to the PHP documentation, in array keys,

  • null is the same as ''
  • false and '0' are the same as 0

In Translation_Entry::key() we can find:

if ( null === $this->singular || '' === $this->singular ) {
        return false;

The singular string being the key of the entries array, that means that null, '', false, 0 and '0' all have the same translation.
I don't expect non-string keys to be used, but '' and '0' are two valid strings which should accept different translations.

Attachments (1)

Capture d’écran 2022-09-26 à 23.00.31.png (274.5 KB) - added by audrasjb 15 months ago.
Mistake solved :)

Download all attachments as: .zip

Change History (14)

#1 in reply to: ↑ description @Chouby
18 months ago

  • null is the same as
  • false and '0' are the same as 0

Sorry, I messed with formatting and don't know how to edit the ticket. This must be read:

  • null is the same as ''
  • false and '0' are the same as 0

#2 @audrasjb
18 months ago

  • Keywords needs-patch added
  • Milestone changed from Awaiting Review to 6.1

Thanks chouby, the reported issue looks legitimate to me.
Definitely moving this for 6.1 consideration.

#3 follow-up: @audrasjb
18 months ago

@Chouby you can edit the ticket at the bottom of this page, just use the "description" field :)

Last edited 18 months ago by audrasjb (previous) (diff)

#4 @sabernhardt
18 months ago

  • Description modified (diff)

#5 in reply to: ↑ 3 @manooweb
18 months ago

Replying to audrasjb:

@Chouby you can edit the ticket at the bottom of this page, just use the "description" field :)<

Are you sure? I also didn't see this field on one of my tickets.

#6 @rafiahmedd
18 months ago

I think we can return just an empty string instead of false because false return a value 0 and that's why an empty string turns into 0 instead of ''.

This ticket was mentioned in PR #2939 on WordPress/wordpress-develop by Hug0-Drelon.

17 months ago

  • Keywords has-patch has-unit-tests added; needs-patch removed

Trac ticket:

  • Do not return false when calling key() on an empty string translation entry.
  • Add test accordingly.

#8 @lopo
15 months ago

I'm reviewing this one as part of the Yoast Contributor Day activities.
The patch looks good to me and appears to be working as expected.

To test the fix I:

  • changed a string in the Settings page to '' (empty string)
  • switched my env to Italian
  • added the following to admin-it_IT.po and updated the .mo with msgfmt on the command line
    msgid "0"
    msgstr "0"
  • I could see the empty string was wrongly translated as 0
  • applying the patch the string is correctly translated to an empty string.

#9 @audrasjb
15 months ago

  • Owner set to audrasjb
  • Status changed from new to accepted

Thanks for the patch @lopo, it works fine on my side using your test scenario. Thanks for adding some unit tests, too.

Self-assigning for commit.

#10 @audrasjb
15 months ago

  • Resolution set to fixed
  • Status changed from accepted to closed

In 54315:

i18n: Ensure empty strings are consistently translated to ''.

This changeset fixes an edge case where empty strings were wrongly translated to '0' (falsey value) instead of '' (empty string).

Props Chouby, manooweb, rafiahmedd, lopo.
Fixes #55941.

#12 @audrasjb
15 months ago

I forgot @hugod in the props list, so I'm adding them with the manual Props tool located in the Make/Core website. Sorry for the inconvenience.

This ticket was mentioned in Slack in #core by sergey. View the logs.

15 months ago

Note: See TracTickets for help on using tickets.