To have a single parameterized message serving all your fields requiredMessage attribute, or any other jsf messages, you need to have dynamic parameters in your jsf message, by creating a custom facelets taglib function.

Place functions.taglib.xml file in your WEB-INF, next to web.xml

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE facelet-taglib PUBLIC
  "-//Sun Microsystems, Inc.//DTD Facelet Taglib 1.0//EN"
  "https://facelets.dev.java.net/source/browse/*checkout*/facelets/src/etc/facelet-taglib_1_0.dtd">
<facelet-taglib xmlns="http://java.sun.com/JSF/Facelet">
	<namespace>http://net.myproject/fnc</namespace>
	<function>
		<function-name>formatMessage</function-name>
		<function-class>net.myproject.view.util.JSFFunctions</function-class>
		<function-signature>
			java.lang.String formatMessage(java.lang.String, java.util.Locale, java.lang.String)
		</function-signature>
	</function>
</facelet-taglib>

and JSFFunctions.java in your project.

package net.myproject.view.util;

import java.util.Locale;

public class JSFFunctions {
    public static String formatMessage(String key, Locale locale, String paramsCombined) {
        Object[] params = paramsCombined.split(",");
        return FacesMessageUtil.getString(key, locale, params);
    }
}

functions.taglib.xml is a reflection to all the static methods in JSFFunctions and will be the link between your jsf pages and this class.
Each method is represented with a <function> tag:
<function-name> holds the static method name
<function-class> holds the class full qualified name, containing that method
<function-signature> holds the declaration of a static method, notice the full qualified names of all parameters and return datatype.

To have your new taglib functions loaded to facelets libraries add this <context-param> to your web.xml:

<context-param>
	<param-name>javax.faces.FACELETS_LIBRARIES</param-name>
	<param-value>/WEB-INF/functions.taglib.xml</param-value>
</context-param>

Now in your jsf page, you can use the namespace defined in <namespace> tag:

<ui:composition xmlns="http://www.w3.org/1999/xhtml"
	xmlns:ui="http://java.sun.com/jsf/facelets"
	xmlns:h="http://java.sun.com/jsf/html"
	xmlns:f="http://java.sun.com/jsf/core"
	xmlns:fnc="http://net.myproject/fnc">

and later on through your page:

<h:inputText ... required="true" 
    requiredMessage="#{fnc:formatMessage('msg.required', myBean.currentLocale, uir['user.name'])}" />

When this expression is evaluated, uir['user.name'] is evaluated first, then passes its value to formatMessage method in JSFFunctions which takes the message parameters as a comma separated String, because facelets taglib functions don’t support Varargs.
FacesMessageUtil.getString handles getting the appropriate message from your .properties file, which in my case should be having these values:

user.name=Name
msg.required={0} value required.

Facelets taglib functions are always handy when you need a value to be evaluated directly in a jsf el expression.