Basic Usage Guide¶
This guide covers the fundamental usage of the String module in Drupal projects.
String Definition¶
Basic String Structure¶
# In your_module.string.yml
your_module.welcome:
default: "Welcome to our site!"
comments:
- "Displayed on the homepage"
- "Used in the main navigation"
your_module.actions.save:
default: "Save"
msgctxt: "form_button"
comments:
- "Used in form submit buttons"
String with Placeholders¶
# In your_module.string.yml
your_module.user.greeting:
default: "Hello, @name! Welcome to @site."
comments:
- "Displayed in user profile"
- "Placeholders: @name (user name), @site (site name)"
your_module.notification.count:
default: "@count new notification"
default_plural: "@count new notifications"
comments:
- "Displayed in notification center"
Using Strings in Code¶
PHP Usage¶
<?php
// Basic string
$output = t('your_module.welcome');
// String with placeholders
$output = t('your_module.user.greeting', [
'@name' => $user->getDisplayName(),
'@site' => \Drupal::config('system.site')->get('name'),
]);
// Plural string
$count = 5;
$output = format_plural($count, 'your_module.notification.count', 'your_module.notification.count');
// String with context
$output = t('your_module.actions.save', [], ['context' => 'form_button']);
Twig Template Usage¶
{# Basic string #}
{{ 'your_module.welcome'|t }}
{# String with placeholders #}
{{ 'your_module.user.greeting'|t({
'@name': user.display_name,
'@site': site_name
}) }}
{# String with context #}
{{ 'your_module.actions.save'|t({}, {'context': 'form_button'}) }}
Warning
There is no equivalent usage of format_plural
in twig template. Hence, Following won't work.
{# Plural string #}
{{ 'your_module.notification.count'|format_plural(count) }}
JavaScript Usage¶
// Basic string
Drupal.t('your_module.welcome');
// String with placeholders
Drupal.t('your_module.user.greeting', {
'@name': userName,
'@site': siteName
});
// Plural string
Drupal.formatPlural(count, 'your_module.notification.count', 'your_module.notification.count');
// String with context
Drupal.t('your_module.actions.save', {}, {context: 'form_button'});
Common Use Cases¶
1. Form Labels and Buttons¶
# In your_module.string.yml
your_module.form:
title:
default: "Contact Form"
fields:
name:
label:
default: "Your Name"
placeholder:
default: "Enter your full name"
email:
label:
default: "Email Address"
placeholder:
default: "Enter your email"
buttons:
submit:
default: "Send Message"
reset:
default: "Clear Form"
2. Error Messages¶
# In your_module.string.yml
your_module.errors:
required:
default: "@field is required"
invalid:
email:
default: "Please enter a valid email address"
phone:
default: "Please enter a valid phone number"
validation:
password:
too_short:
default: "Password must be at least @length characters"
too_simple:
default: "Password is too simple"
3. Status Messages¶
# In your_module.string.yml
your_module.status:
success:
save:
default: "@type has been saved successfully"
delete:
default: "@type has been deleted successfully"
error:
save:
default: "Failed to save @type"
delete:
default: "Failed to delete @type"
4. Navigation Items¶
# In your_module.string.yml
your_module.navigation:
home:
default: "Home"
profile:
default: "My Profile"
settings:
default: "Settings"
logout:
default: "Log Out"
Best Practices¶
-
Consistent Naming:
# Good your_module.user.profile.title your_module.user.profile.description # Bad your_module.profile_title your_module.profile_desc
-
Meaningful Groups:
# Good your_module.user.profile.edit your_module.user.profile.view # Bad your_module.edit_profile your_module.view_profile
-
Clear Context:
# Good your_module.actions.save: default: "Save" msgctxt: "form_button" your_module.navigation.save: default: "Save" msgctxt: "menu_item"
About using context
Since strings are now identified with unique unique identifiers, this means in most cases "context" becomes un-necessary.
- Helpful Comments:
your_module.user.welcome: default: "Welcome back!" comments: - "Displayed in user dashboard" - "Shown after successful login" - "Used in user greeting block"
Next Steps¶
- Learn about String Management
- Explore Translation Features
- Check out Best Practices
- Read the API Reference