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
| Key | Default | Description |
|---|---|---|
singular | (required) | Singular form ("Book") |
plural | Auto-generated | Plural form ("Books") |
all_items | plural | List 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_name | plural | WordPress 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/'
);
});