Say you're making an cooking game, and in your game there are many ingredients: eggs, lemons, ants, acorns etc. You want to be able to show text like this:

"You added 3 acorns to the soup"

You have a bunch of item definitions with their names, but dang it they're all singular. You tried slapping an "s" on the end of the word but "strawberrys" isn't making the cut.

You've put all your terms in a localization table and you're loading it with C++ by using a handy tutorial


Drop_Result,"You found {Count} {Ingredient}!",

Fixing Our Localization Table

We can use FText::Format's support for plural forms to describe how each of our words should be pluralized.

strawberry now becomes {Count}|plural(one=strawberry,other=strawberries). This means that if we pass Count into FText::Format, the correct plural form will automatically be displayed.

For more information on FText::Format see the tutorial on UI Localization


Drop_Result,"You found {Count} {Ingredient}!",

Adding a C++ Function

Next, we need to make a C++ function that we can use every time we want to display an item name in single or plural form.


We could make another function to get the number and the ingredient name together if we do that often, but returning just the pluralized name is more useful as a single-purpose function.

FText UMyGameplayStatics::GetIngredientName(FString IngredientName, int32 Count)
	FString Key = FString::Printf("Ingredient_%s_Name", *IngredientName);

	FText UnformattedText = FText::FromStringTable("MyTable", Key);

	FFormatNamedArguments Args;
	Args.Add("Count", Count);
	return FText::Format(UnformattedText, Args);

Now whenever we need to show an ingredient name we pass in how many we're showing, and we can get the correct plural form!


struct FLootDrop {
	FString Ingredient;
	int32 Count;

FLootDrop Loot { "Strawberry", 3 };

FText PluralizedIngredientName = UMyGameplayStatics::GetIngredientName(Loot.Ingredient, Loot.Count);

FFormatNamedArguments Args;
Args.Add("Ingredient", PluralizedIngredientName);
Args.Add("Count", Loot.Count);

FText LootText = FText::Format(FText::FromStringTable("MyTable", "Drop_Result"), Args));

// LootDropLabel now shows 'You found 3 strawberries!'