Skip to main content

Internationalization (i18n)

WordPress i18n tools scan source files for translation function calls. To ensure your DataView labels are translatable, pass pre-translated strings.

Basic Usage

Instead of a simple string, pass an array with translated labels:

$view = new DataView([
'slug' => 'book',
'label' => [
'singular' => __('Book', 'my-plugin'),
'plural' => __('Books', 'my-plugin'),
],
'fields' => [
'title' => 'string',
],
]);

Available Label Keys

KeyDefaultDescription
singular(required)Singular form ("Book")
pluralAuto-generatedPlural form ("Books")
all_itemspluralList page title
add_new"Add New"Add button text
add_new_item"Add New singular"Create page title
edit_item"Edit singular"Edit page title
new_item"New singular"New item text
view_item"View singular"View item text
view_items"View plural"View items text
search_items"Search plural"Search text
not_found"No plural found"Empty list message
not_found_in_trash"No plural found in Trash"Empty trash message
settings"singular Settings"Settings page title
item_created"Item created successfully."Create notice
item_updated"Item updated successfully."Update notice
item_deleted"Item deleted successfully."Delete notice
settings_saved"Settings saved successfully."Settings notice
menu_namepluralWordPress menu name

Complete Example

$view = new DataView([
'slug' => 'book',
'label' => [
// Required
'singular' => __('Book', 'my-plugin'),
'plural' => __('Books', 'my-plugin'),

// Page titles
'all_items' => __('All Books', 'my-plugin'),
'add_new_item' => __('Add New Book', 'my-plugin'),
'edit_item' => __('Edit Book', 'my-plugin'),

// WordPress labels
'add_new' => __('Add New', 'my-plugin'),
'new_item' => __('New Book', 'my-plugin'),
'view_item' => __('View Book', 'my-plugin'),
'view_items' => __('View Books', 'my-plugin'),
'search_items' => __('Search Books', 'my-plugin'),
'not_found' => __('No books found', 'my-plugin'),
'not_found_in_trash' => __('No books found in Trash', 'my-plugin'),

// Success notices
'item_created' => __('Book created successfully.', 'my-plugin'),
'item_updated' => __('Book updated successfully.', 'my-plugin'),
'item_deleted' => __('Book deleted successfully.', 'my-plugin'),

// Menu
'menu_name' => __('Books', 'my-plugin'),
],
'fields' => [...],
'ui' => [
'menu_label' => __('Books', 'my-plugin'),
],
]);

Settings Page Example

$view = new DataView([
'slug' => 'my_plugin_settings',
'label' => [
'singular' => __('Settings', 'my-plugin'),
'settings' => __('Plugin Settings', 'my-plugin'),
'settings_saved' => __('Settings saved.', 'my-plugin'),
],
'storage' => 'option',
'mode' => 'singular',
'ui' => [
'menu_label' => __('My Plugin', 'my-plugin'),
'parent' => 'options-general.php',
],
]);

Minimal Setup

At minimum, provide translated singular and plural labels:

$view = new DataView([
'slug' => 'product',
'label' => [
'singular' => __('Product', 'my-plugin'),
'plural' => __('Products', 'my-plugin'),
],
'fields' => ['name' => 'string'],
]);

Other labels are auto-generated from these:

  • "Add New Product" from singular
  • "Edit Product" from singular
  • "Products" for menu from plural

Accessing Labels

Get labels programmatically:

$config = $view->get_config();

$config->get_singular_label(); // "Product"
$config->get_plural_label(); // "Products"
$config->get_label('add_new_item'); // "Add New Product"
$config->get_label('custom', 'Default'); // "Default"

Translation Files

Ensure your plugin generates proper translation files:

# Generate POT file
wp i18n make-pot . languages/my-plugin.pot

# Create translations
# languages/my-plugin-de_DE.po

# Compile to MO
wp i18n make-mo languages/

Load translations in your plugin:

add_action('init', function() {
load_plugin_textdomain(
'my-plugin',
false,
dirname(plugin_basename(__FILE__)) . '/languages/'
);
});