Content Structure
Overview
The main content is structured in two levels: tour stops and audio content. In addition to the main audio guide content, the app includes a list of amenities & two about pages (one for the museum, one for the app itself)
Audio Guide Content
Each tour stop item contains the following properties:
- Title (I18n)
- Header image
- Duration (I18n)
- Floor
- Included audio content (in a sorted list)
- Regions where the tour stop should be displayed
- Category (used to avoid displaying highlights twice)
There are some related properties as well. The data model is located at app/models/tourStop.js.
Each audio content item contains the following properties:
- Title (I18n)
- 3 digit ID
- Category (used to display highlights differently)
- Speaker (used in transcripts)
- Duration (I18n)
- Transcript (I18n)
There are some related properties as well. The data model is located at app/models/audioContent.js.
Everything marked I18n is localized using the app/data/strings.js file, see below.
Until a CMS is implemented, the content is fetched from a static file: app/data/tourStops.js. This file contains a javascript object (not a strict JSON) which is pulled into a Realm database when the app is launched for the first time & every time the app is updated (see app/data/hydrate.js).
Amenities
Amenities are listed in a separate js file: app/data/amenities.js. Amenities have three properties:
- Title (I18n)
- Description (I18n)
- Icon (in png format)
About Pages
There are two about pages in the app. These are regular components in the app/components folder: aboutScreen.js and aboutTheAppScreen.js. The components contain variables for headings and paragraphs which are then pulled from strings.js after localization.
Localization
The app is localized using react-native-i18n. Localized strings are put in app/data/strings.js. In app components, localized strings are fetched using the I18n.t function. Example:
<Text style={styles.floorText}>
{`${I18n.t('floor').toUpperCase()} ${this.props.floor}`}
</Text>