# crowdin-aosp.yaml
#
# Crowdin configuration file for CyanogenMod's
# additional languages not supported by AOSP
#
# Copyright (C) 2014 The CyanogenMod Project
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
#   http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.

project_identifier: cyanogenmod-aosp
api_key: your_api_key
base_path: your/path
preserve_hierarchy: true

files:
  # Framework packages
  -
    source:      '/frameworks/base/core/res/res/values/strings.xml'
    translation: '/%original_path%-%android_code%/%original_file_name%'
    languages_mapping: &anchor
      android_code:
        ast: es-rXA
        bn: bn
        eu: eu
        is: is
        ku: ku
        lb: lb
        ml-IN: ml
        pa-IN: pa
        ta: ta
        ug: ug

  -
    source:      '/frameworks/base/packages/**/values/strings.xml'
    translation: '/%original_path%-%android_code%/%original_file_name%'
    languages_mapping: *anchor
    ignore:
      - /frameworks/base/packages/services
      - /frameworks/base/packages/WallpaperCropper
      - /frameworks/base/packages/Keyguard/test

  # Apps
  -
    source:      '/packages/apps/**/values/strings.xml'
    translation: '/%original_path%-%android_code%/%original_file_name%'
    languages_mapping: *anchor
    ignore:
      - /packages/apps/**/tests
      - /packages/apps/Apollo
      - /packages/apps/AudioFX
      - /packages/apps/BluetoothExt
      - /packages/apps/CameraNext
      - /packages/apps/CM*
      - /packages/apps/DSPManager
      - /packages/apps/Email/emailcommon
      - /packages/apps/GalleryNext
      - /packages/apps/LockClock
      - /packages/apps/Mms/apptests
      - /packages/apps/OneClickAndroid
      - /packages/apps/SamsungServiceMode
      - /packages/apps/Screencast
      - /packages/apps/SpeechRecorder
      - /packages/apps/ThemeChooser
      - /packages/apps/ThemeStore
      - /packages/apps/Torch
      - /packages/apps/Trebuchet
      - /packages/apps/VoicePlus
      - /packages/apps/VoiceWakeup

  -
    source:      '/packages/apps/Bluetooth/res/values/strings_pbap.xml'
    translation: '/%original_path%-%android_code%/%original_file_name%'
    languages_mapping: *anchor

  -
    source:      '/packages/apps/Calendar/res/values/arrays.xml'
    translation: '/%original_path%-%android_code%/%original_file_name%'
    languages_mapping: *anchor

  -
    source:      '/packages/apps/DeskClock/res/values/array.xml'
    translation: '/%original_path%-%android_code%/%original_file_name%'
    languages_mapping: *anchor

  -
    source:      '/packages/apps/Gallery2/res/values/filtershow_strings.xml'
    translation: '/%original_path%-%android_code%/%original_file_name%'
    languages_mapping: *anchor

  -
    source:      '/packages/apps/Mms/res/values/arrays.xml'
    translation: '/%original_path%-%android_code%/%original_file_name%'
    languages_mapping: *anchor

  -
    source:      '/packages/apps/Settings/res/values/arrays.xml'
    translation: '/%original_path%-%android_code%/%original_file_name%'
    languages_mapping: *anchor

  # Input methods
  -
    source:      '/packages/inputmethods/LatinIME/java/res/values/strings*.xml'
    translation: '/%original_path%-%android_code%/%original_file_name%'
    languages_mapping: *anchor

  # Providers
  -
    source:      '/packages/providers/**/values/strings.xml'
    translation: '/%original_path%-%android_code%/%original_file_name%'
    languages_mapping: *anchor
    ignore:
      - /packages/providers/**/tests
      - /packages/providers/PartnerBookmarksProvider
      - /packages/providers/ThemesProvider
      - /packages/providers/UserDictionaryProvider

  # Screensavers
  -
    source:      '/packages/screensavers/**/values/strings.xml'
    translation: '/%original_path%-%android_code%/%original_file_name%'
    languages_mapping: *anchor

  # Services
  -
    source:      '/packages/services/**/values/strings.xml'
    translation: '/%original_path%-%android_code%/%original_file_name%'
    languages_mapping: *anchor
    ignore:
      - /packages/services/**/tests

  # Wallpapers
  -
    source:      '/packages/wallpapers/**/values/strings.xml'
    translation: '/%original_path%-%android_code%/%original_file_name%'
    languages_mapping: *anchor
    ignore:
      - /packages/wallpapers/Galaxy4
      - /packages/wallpapers/PhotoPhase
