Jump to content

Recommended Posts

Posted

I'm trying to add localized texts to a gui. I'm using I18n.format(String string, Object... params) in order to localize the texts.

 

When I do any alternations to the texts (like replacing regular expressions with actual strings or splitting lines using string.split(regEx)), the texts have a prefix "Format error: " on them.

 

My gui drawScreen code:

@Override
public void drawScreen(int par1, int par2, float par3) {
GlStateManager.color(1F, 1F, 1F, 1F);
mc.renderEngine.bindTexture(texture);
drawTexturedModalRect(left, top, 0, 0, guiWidth, guiHeight);
if (world.isRemote) {
	String xPos = I18n.format("guiText.ijc:xPos").replace("%xPos", "" + pos.getX());
	String yPos = I18n.format("guiText.ijc:yPos").replace("%yPos", "" + pos.getY());
	String zPos = I18n.format("guiText.ijc:zPos").replace("%zPos", "" + pos.getZ());

	fontRendererObj.drawString(xPos, left + 16, top + 32, 4210752);
	fontRendererObj.drawString(yPos, left + 16, top + 48, 4210752);
	fontRendererObj.drawString(zPos, left + 16, top + 64, 4210752);
        }
}

 

My en_US.lang file:

guiText.ijc:xPos=x: %xPos
guiText.ijc:yPos=y: %yPos
guiText.ijc:zPos=z: %zPos

 

A visual example of the problem:

http://pasteboard.co/27h0Krag.png - The "Format error: " at the beginning of each line that I translate...

 

I hope I'm not doing something silly...

Posted

I18n.format

returns the translated text prefixed with "Format error:" when

String.format

throws an

IllegalFormatException

. You can set a breakpoint in the

catch

block of

Locale#formatMessage

(called by

I18n.format

) to see what this exception is.

 

I suspect it's because you're using a percent sign followed by a letter (and then some other letters) as your own formatting placeholders, but

String.format

is trying to replace these itself and throwing an exception because they're not valid placeholders or there's no format arguments.

 

Do one of the following to fix this:

  • Use valid formatting placeholders (e.g.
    %d

    ), pass the format arguments to

    I18n.format

    and remove the

    String#replace

    calls.

  • Escape the percent sign with another percent sign (
    %%

    ) to prevent

    String.format

    from treating it as a formatting placeholder.

Please don't PM me to ask for help. Asking your question in a public thread preserves it for people who are having the same problem in the future.

Posted

I just replaced the placeholder % with wrapping the word with * and it works... I might look into doing one of the offers to fix the general problem if it appears again, but for now it works. Thanks a lot!

Posted

I'm localizing the coords because I'm putting it in a gui with text and I want the gui to be fully modifiable to other languages, so even if the coords stay the same, there are other places using coordinates and they do have text that is interchangable between languages, so I just want to make it fully modifiable.

 

Thanks for the Integer tip, I actually didn't know that... ;)

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.
Note: Your post will require moderator approval before it will be visible.

Guest
Unfortunately, your content contains terms that we do not allow. Please edit your content to remove the highlighted words below.
Reply to this topic...

×   Pasted as rich text.   Restore formatting

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Announcements



×
×
  • Create New...

Important Information

By using this site, you agree to our Terms of Use.