Posted July 2, 20169 yr 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...
July 2, 20169 yr 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.
July 2, 20169 yr Author 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!
July 2, 20169 yr Just out of curiosity, why bother translating coordinate symbols? I am pretty sure they are the same in all languages anyway? also, to convert an int to a String you can use: String.valueOf(i); Integer.toString(i); instead of "" + i; which looks a bit cleaner in my opinion I made the Mob Particles mod, you can check it out here: http://www.minecraftforum.net/topic/2709242-172-forge-mob-particles/
July 2, 20169 yr Author 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.