Event Manager supports multiple languages, and the way to translate it is technically the same as you would use to translate seating charts you show to your ticket buyers.
This means you can use the language
parameter to set the overall language, and the messages
parameter to override individual lines of text.
Setting the Overall Language
Event Manager has built-in support for English (en), Spanish (es), Portuguese (pt), German (de) and Dutch (nl).
To render a floor plan in your language, simply pass in a “language” config parameter, like so:
new seatsio.EventManager({
...,
"language": "es"
}).render();
Built-in texts
Built-in texts are texts that Seats provides out of the box. For example texts like the ones in the tooltips that get shown when an administrator or box office manager hovers over a seat or a section.
These are the built-in texts that are available within Event Manager, with their translation in English:
'object': 'object',
'objects': 'objects',
'forSale': 'For Sale',
'notForSale': 'Not For Sale',
'numPlacesNotForSale': '%a places not for sale',
'notForSaleInSeason': 'Not For Sale in season',
'reservedByToken': 'Temporarily held',
'booked': 'Booked',
'placesBooked': '%a places booked',
'placesUnavailable': '%a unavailable',
'allPlacesAvailable': 'All available',
'noPlacesAvailable': 'None available',
'seasonBookedInCurrentEvent': 'Booked in this event',
'seasonBookedInCurrentSeason': 'Booked for this season',
'seasonBooked': 'Booked for season',
'seasonBookedInEvents': 'Booked in events of this season',
'seasonUnavailableFromEventBookings': 'Unavailable from event bookings',
'assignedToChannelInSeasonTopLevelSeason': 'Assigned to channel in event or partial season of this season',
'assignedToChannelInSeasonPartialSeason': 'Assigned to channel in season or event of this partial season',
'assignedToChannelInSeasonEvent': 'Assigned to channel in season or partial season of this event',
'anEventInSeasonChannelForTopLevelSeason': 'Channel from event or partial season',
'anEventInSeasonChannelForPartialSeason': 'Channel from event',
'anEventInSeasonChannelForEvent': 'Channel from partial season',
'manage': 'Manage',
'channels': 'Channels',
'seasonTableBookingModeNotEditableNotice': 'This event is part of a season. Table booking settings can only be managed from the season.',
'seasonChannelsNotEditableNotice': 'This event is part of a season. Channels can only be managed from the season.',
'seasonCategoriesNotEditableNotice': 'This event is part of a season. Categories can only be managed from the season.',
'noSeasonChannelsCreated': 'No season channels created',
'free': 'Free',
'numObjectsMarkedAs': '%a marked as %b',
'willBeMarkedAs': 'Will be marked as %a',
'numExtraPlacesWillBeBooked': '%a will be booked',
'numPlacesWillBeReleased': '%a will be released',
'objectWillBeBooked': 'Will be booked',
'objectWillBeReleased': 'Will be released',
'cannotBeMarkedAs': 'Cannot be marked as %a',
'markNumObjectsAs': 'Mark %a as %b',
'markNumPlacesAsNotForSale': 'Mark %a places as not for sale',
'numWillBeBookableByTable': '%a will be bookable by table',
'numWillBeBookableBySeat': '%a will be bookable by seat',
'willBeBookableByTable': 'Will be bookable by table',
'willBeBookableBySeat': 'Will be bookable by seat',
'allTablesWillBeBookableByTable': 'All tables will be bookable by table.',
'allTablesWillBeBookableBySeat': 'All tables will be bookable by seat.',
'bookableByTable': 'Bookable by table',
'bookableBySeat': 'Bookable by seat',
'bookBySeatsOnly': 'Book by seats',
'bookByTablesOnly': 'Book by table',
'confirmAllBookableBySeat': 'Do you want to make all tables bookable by seat immediately?',
'confirmAllBookableByTable': 'Do you want to make all tables bookable by table immediately?',
'confirmResetTableBookingModes': 'Remove table booking settings for this event, and switch to the settings defined on the chart?',
'clickToMarkAs': 'Click to mark %a',
'clickToUndo': 'Click to undo',
'clickToRelease': 'Click to release',
'clickToBook': 'Click to book',
'success': 'Success',
'numSavesNotForSaleRemaining': '%a remaining until %b to mark places not for sale.',
'numSavesForSaleRemaining': 'Unlimited saves to open places for sale.',
'notForSaleWillConsumeSaveMessage': 'Marking places not for sale will consume 1 save',
'forSaleWillNotConsumeSaveMessage': 'Opening places for sale will not consume a save',
'save': 'save',
'saves': 'saves',
'savedTooManyTimes': 'Saved too many times. Please try again later.',
'somethingWentWrong': 'Whoops, something went wrong.',
'clickToChange': 'Click to change',
'place': 'place',
'places': 'places',
'extraPlace': 'extra place',
'extraPlaces': 'extra places',
'bookNumPlaces': 'Book %a',
'releaseNumPlaces': 'Release %a',
'numPlacesBooked': '%a booked',
'close': 'Close',
'table': 'table',
'tables': 'tables',
'markAs': 'Mark %a',
'undo': 'Undo',
'release': 'Release',
'book': 'Book',
'change': 'Change',
'noChannel': 'No channel',
'manageChannels': 'Manage channels',
'serverFailCheckInternet': 'Failed to contact the server. Please make sure you are connected to the internet and try again.',
'channelName': 'Channel %a',
'confirmUnassignAndRemoveChannel': 'This channel is applied to some objects. Are you sure you wish to unassign and remove this channel?',
'createChannel': 'Create channel',
'applyChanges': 'Apply changes',
'socialDistancingRulesets': 'Social distancing rulesets',
'createRuleset': 'Create ruleset',
'confirmDeleteRuleset': 'Are you sure you wish to delete this ruleset? This action cannot be reverted.',
'rulesetX': 'Ruleset %a',
'rulesetName': 'Ruleset name',
'noChannelsCreated': 'No channels created yet',
'numberOfDisabledSeatsToTheSides': 'Disable seats to the sides',
'numberOfDisabledAisleSeats': 'Disable aisle seats',
'maxGroupSize': 'Maximum group size',
'enableMaxGroupSizeHint': 'Defines how many people booking together can sit together.',
'disableSeatsInFrontAndBehind': 'Disable seats in front and behind',
'disableDiagonalSeatsInFrontAndBehind': 'Disable extra seats in front and behind (diagonally)',
'selectMode': 'Select mode',
'editRules': 'Edit rules',
'manuallyDisableSeats': 'Manually disable seats',
'manuallyEnableSeats': 'Manually enable seats',
'disableSeats': 'Disable seats',
'disabledByRules': 'Disabled by rules',
'manuallyDisabled': 'Manually disabled',
'manuallyEnabledOverRules': 'Manually enabled over rules',
'enable': 'Enable',
'disable': 'Disable',
'goBack': 'Go back',
'confirmLeaveChangesWillBeLost': 'Are you sure you wish to leave? Changes made will be lost.',
'selectWholeRow': 'Select whole row',
'thisIsAPreview': 'This is a preview.',
'clickToTestRules': 'Click on seats to test your settings',
'clickToDisableSeats': 'Click on seats to disable them',
'clickToEnableSeats': 'Click on seats to enable them above rules',
'cantManuallyEnableAndDisableSameSeat': "You can't manually enable and manually disable the same seat.",
'socialDistancingGroupLayoutType': 'Group layout',
'fixedSocialDistancingGroupLayout': 'Fixed',
'ruleBasedSocialDistancingGroupLayout': 'Rule-based',
'fixedSocialDistancingGroupLayoutHint1': 'You indicate upfront which seats are disabled.',
'fixedSocialDistancingGroupLayoutHint2': 'When the ticket buyer selects a seat, all adjacent seats get selected as well.',
'ruleBasedSocialDistancingGroupLayoutHint': 'Rules dynamically determine which seats will be disabled',
'disabledSeat': 'disabled seat',
'disabledSeats': 'disabled seats',
'manuallyDisabledSeat': 'manually disabled seat',
'manuallyDisabledSeats': 'manually disabled seats',
'manuallyEnabledSeat': 'manually enabled seat',
'manuallyEnabledSeats': 'manually enabled seats',
'delete': 'Delete',
'duplicate': 'Duplicate',
'maxOccupancy': 'Max occupancy',
'maxOccupancyPlaces': 'places',
'oneGroupPerTable': 'One group per table',
'oneGroupPerTableHint': 'Remaining seats are left empty.',
'confirmBookSocialDistancingTitle': 'Proceed with booking?',
'confirmBookSocialDistancingBody': "You're about to book seats that were left empty by the social distancing ruleset for this event. Make sure this doesn't violate social distancing regulation.",
'confirmBookSocialDistancingConfirmButton': 'Book them anyway',
'resetToDefaults': 'Reset to defaults',
'resetToDefaults_help_makeAllBookByTable': 'Make all tables bookable by table, as indicated by the settings defined on the seating chart.',
'resetToDefaults_help_makeAllBookBySeat': 'Make all tables bookable by seat, as indicated by the settings defined on the chart.',
'resetToDefaults_help': 'Switch to the settings defined on the chart.',
'resetToDefaults_help_categories': 'Reset all object categories to the ones defined on the chart',
'confirmResetObjectCategories': 'Remove custom categorization for this event, and switch to the categorization defined on the chart?',
'tableBookingModeInherit': 'Table booking settings from the chart are currently used',
'tableBookingModeAllBySeat': 'All tables are currently bookable by seat',
'tableBookingModeAllByTable': 'All tables are currently bookable as a whole',
'tableBookingModeCustom': 'Table booking settings from the chart are currently overridden',
'noCategory': 'No category',
'resetToDefaultCategory': 'Default category',
'showSeatLabels': 'Show seat labels',
'showRowLabels': 'Show row labels',
'useChannelColors': 'Use channel colors',
'searchByObjectLabel': 'Search by object label',
'xObjectsFound': '%a objects found.',
'objectFoundLabel': 'Found object %a',
'pressToFocus': '%a to focus.',
'pressToFocusWithinFloor': '%a to focus within floor.',
'table_booked_seats_unavailable': 'This table is booked. All seats are unavailable for ticket buyers.',
'seat_booked_table_unavailable': 'This seat is booked. Its table is unavailable for ticket buyers.',
'done': 'Done',
'entirelyForSale': 'Entirely for sale',
'entirelyNotForSale': 'Entirely not for sale',
'numberOfPlacesNotForSaleError': 'Number of places must be between 1 and %a',
'placesNotForSale': 'places not for sale',
'defaultChannel': 'Default channel',
'defaultChannelHint': 'Use channel assigned elsewhere in the season',
'xMore': '%a more'
Translating dynamic labels and texts
Besides the built-in texts, other texts can be translated as well:
static text you add on your floor plan while you're designing it
category labels
...
To translate these dynamic, you need to pass in a messages config variable, like so:
new seatsio.EventManager({
...,
"messages": {
"STAGE": "Podium",
"ORGAN": "Orgue"
}
}).render();
Please note: the keys in the messages object are cAsE sEnSiTivE!
Recap
set the language config param to translate built-in texts.
use a messages array to translate your own labels and texts.