diff --git a/core/modules/locale/locale.api.php b/core/modules/locale/locale.api.php
index bd1b479..9985b01 100644
--- a/core/modules/locale/locale.api.php
+++ b/core/modules/locale/locale.api.php
@@ -113,7 +113,7 @@
  * @see locale_translation_project_list()
  * @ingroup interface_translation_properties
  */
-function hook_locale_translation_projects_alter(&$projects) {
+function hook_locale_translation_projects_alter(array &$projects) {
   // The translations are located at a custom translation sever.
   $projects['existing_project'] = array(
     'info' => array(
diff --git a/core/modules/locale/locale.batch.inc b/core/modules/locale/locale.batch.inc
index 5d3b73a..83a809d 100644
--- a/core/modules/locale/locale.batch.inc
+++ b/core/modules/locale/locale.batch.inc
@@ -90,7 +90,7 @@ function locale_translation_batch_status_check($project, $langcode, array $optio
  * @param array $results
  *   Batch results.
  */
-function locale_translation_batch_status_finished($success, $results) {
+function locale_translation_batch_status_finished($success, array $results) {
   if ($success) {
     if (isset($results['failed_files'])) {
       if (\Drupal::moduleHandler()->moduleExists('dblog') && \Drupal::currentUser()->hasPermission('access site reports')) {
@@ -133,7 +133,7 @@ function locale_translation_batch_status_finished($success, $results) {
  *
  * @see locale_translation_batch_fetch_import()
  */
-function locale_translation_batch_fetch_download($project, $langcode, &$context) {
+function locale_translation_batch_fetch_download($project, $langcode, array &$context) {
   $sources = locale_translation_get_status(array($project), array($langcode));
   if (isset($sources[$project][$langcode])) {
     $source = $sources[$project][$langcode];
@@ -167,7 +167,7 @@ function locale_translation_batch_fetch_download($project, $langcode, &$context)
  * @see locale_translate_batch_import_files()
  * @see locale_translation_batch_fetch_download()
  */
-function locale_translation_batch_fetch_import($project, $langcode, $options, &$context) {
+function locale_translation_batch_fetch_import($project, $langcode, array $options, array &$context) {
   $sources = locale_translation_get_status(array($project), array($langcode));
   if (isset($sources[$project][$langcode])) {
     $source = $sources[$project][$langcode];
@@ -206,7 +206,7 @@ function locale_translation_batch_fetch_import($project, $langcode, $options, &$
  * @param array $results
  *   Batch results.
  */
-function locale_translation_batch_fetch_finished($success, $results) {
+function locale_translation_batch_fetch_finished($success, array $results) {
   module_load_include('bulk.inc', 'locale');
   if ($success) {
     \Drupal::state()->set('locale.translation_last_checked', REQUEST_TIME);
diff --git a/core/modules/locale/locale.compare.inc b/core/modules/locale/locale.compare.inc
index e131d99..812eb60 100644
--- a/core/modules/locale/locale.compare.inc
+++ b/core/modules/locale/locale.compare.inc
@@ -158,7 +158,7 @@ function locale_translation_project_list() {
  * @return array
  *   Array of .info.yml file data.
  */
-function _locale_translation_prepare_project_list($data, $type) {
+function _locale_translation_prepare_project_list(array $data, $type) {
   foreach ($data as $name => $file) {
     // Include interface translation projects. To allow
     // \Drupal\Core\Utility\ProjectInfo->processInfoList() to identify this as
@@ -198,10 +198,7 @@ function locale_translation_default_translation_server() {
  * @param string $langcodes
  *   Array of language codes. Defaults to all translatable languages.
  *
- * @return array
- *   Available sources indexed by project and language.
- *
- * @todo Return batch or NULL.
+ * @todo Return batch or NULL. https://www.drupal.org/node/2411767
  */
 function locale_translation_check_projects($projects = array(), $langcodes = array()) {
   if (locale_translation_use_remote_source()) {
@@ -285,7 +282,7 @@ function locale_translation_batch_status_build($projects = array(), $langcodes =
  * @return array
  *   Array of batch operations.
  */
-function _locale_translation_batch_status_operations($projects, $langcodes, $options = array()) {
+function _locale_translation_batch_status_operations(array $projects, array $langcodes, array $options = array()) {
   $operations = array();
 
   foreach ($projects as $project) {
diff --git a/core/modules/locale/locale.fetch.inc b/core/modules/locale/locale.fetch.inc
index 9568691..4ee61c6 100644
--- a/core/modules/locale/locale.fetch.inc
+++ b/core/modules/locale/locale.fetch.inc
@@ -92,7 +92,7 @@ function locale_translation_batch_fetch_build($projects = array(), $langcodes =
  * @return array
  *   Array of batch operations.
  */
-function _locale_translation_fetch_operations($projects, $langcodes, $options) {
+function _locale_translation_fetch_operations(array $projects, array $langcodes, array $options) {
   $operations = array();
 
   foreach ($projects as $project) {
diff --git a/core/modules/locale/locale.module b/core/modules/locale/locale.module
index 3667f93..cdfd620 100644
--- a/core/modules/locale/locale.module
+++ b/core/modules/locale/locale.module
@@ -257,13 +257,13 @@ function locale_translatable_language_list() {
  *
  * The index is computed from the formula of this language.
  *
- * @param $count
+ * @param int $count
  *   Number to return plural for.
- * @param $langcode
+ * @param string $langcode
  *   Optional language code to translate to a language other than
  *   what is used to display the page.
  *
- * @return
+ * @return int
  *   The numeric index of the plural variant to use for this $langcode and
  *   $count combination or -1 if the language was not found or does not have a
  *   plural formula.
@@ -405,7 +405,7 @@ function locale_system_update(array $components) {
  *   An array of arrays of component (theme and/or module) names to import
  *   translations for, indexed by type.
  */
-function locale_system_remove($components) {
+function locale_system_remove(array $components) {
   $components += array('module' => array(), 'theme' => array());
   $list = array_merge($components['module'], $components['theme']);
   if ($language_list = locale_translatable_language_list()) {
@@ -843,7 +843,7 @@ function locale_translation_get_status($projects = NULL, $langcodes = NULL) {
  * @param array $data
  *   File object also containing timestamp when the translation is last updated.
  */
-function locale_translation_status_save($project, $langcode, $type, $data) {
+function locale_translation_status_save($project, $langcode, $type, array $data) {
   // Followup issue: http://drupal.org/node/1842362
   // Split status storage per module/language and expire individually. This will
   // improve performance for large sites.
@@ -897,7 +897,7 @@ function locale_translation_status_save($project, $langcode, $type, $data) {
  * @param array $langcodes
  *   Language code(s) to be deleted from the cache.
  */
-function locale_translation_status_delete_languages($langcodes) {
+function locale_translation_status_delete_languages(array $langcodes) {
   if ($status = locale_translation_get_status()) {
     foreach ($status as $project => $languages) {
       foreach ($languages as $langcode => $source) {
@@ -916,7 +916,7 @@ function locale_translation_status_delete_languages($langcodes) {
  * @param array $projects
  *   Project name(s) to be deleted from the cache.
  */
-function locale_translation_status_delete_projects($projects) {
+function locale_translation_status_delete_projects(array $projects) {
   $status = locale_translation_get_status();
 
   foreach ($status as $project => $languages) {
@@ -978,7 +978,7 @@ function locale_string_is_safe($string) {
  *   (optional) List of string identifiers that have been updated / created.
  *   If not provided, all caches for the affected languages are cleared.
  */
-function _locale_refresh_translations($langcodes, $lids = array()) {
+function _locale_refresh_translations(array $langcodes, array $lids = array()) {
   if (!empty($langcodes)) {
     // Update javascript translations if any of the strings has a javascript
     // location, or if no string ids were provided, update all languages.
@@ -1029,9 +1029,6 @@ function _locale_strip_quotes($string) {
  * @param string $filepath
  *   File name to parse.
  *
- * @return array
- *   Array of string objects to update indexed by context and source.
- *
  * @throws Exception
  *   If a non-local file is attempted to be parsed.
  */
@@ -1133,10 +1130,10 @@ function _locale_parse_js_file($filepath) {
  * files are rebuilt (with locale_update_js_files()) the next time a
  * request is served in that language.
  *
- * @param $langcode
+ * @param string $langcode
  *   The language code for which the file needs to be refreshed.
  *
- * @return
+ * @return array
  *   New content of the 'system.javascript_parsed' variable.
  */
 function _locale_invalidate_js($langcode = NULL) {
@@ -1161,7 +1158,7 @@ function _locale_invalidate_js($langcode = NULL) {
 /**
  * (Re-)Creates the JavaScript translation file for a language.
  *
- * @param $langcode
+ * @param string $langcode
  *   The language, the translation file should be (re)created for.
  *
  * @return bool
diff --git a/core/modules/locale/src/Form/TranslationStatusForm.php b/core/modules/locale/src/Form/TranslationStatusForm.php
index ee07029..56eb30e 100644
--- a/core/modules/locale/src/Form/TranslationStatusForm.php
+++ b/core/modules/locale/src/Form/TranslationStatusForm.php
@@ -242,7 +242,7 @@ protected function prepareUpdateData(array $status) {
    * @return string
    *   The string which contains debug information.
    */
-  protected function createInfoString($project_info) {
+  protected function createInfoString(array $project_info) {
     $remote_path = isset($project_info->files['remote']->uri) ? $project_info->files['remote']->uri : FALSE;
     $local_path = isset($project_info->files['local']->uri) ? $project_info->files['local']->uri : FALSE;
 
diff --git a/core/modules/locale/src/Gettext.php b/core/modules/locale/src/Gettext.php
index cd993b3..1a96798 100644
--- a/core/modules/locale/src/Gettext.php
+++ b/core/modules/locale/src/Gettext.php
@@ -46,7 +46,7 @@ class Gettext {
    *
    * @see \Drupal\locale\PoDatabaseWriter
    */
-  public static function fileToDatabase($file, $options) {
+  public static function fileToDatabase($file, array $options) {
     // Add the default values to the options array.
     $options += array(
       'overwrite_options' => array(),
diff --git a/core/modules/locale/src/LocaleConfigSubscriber.php b/core/modules/locale/src/LocaleConfigSubscriber.php
index 6c42d50..7d18bb1 100644
--- a/core/modules/locale/src/LocaleConfigSubscriber.php
+++ b/core/modules/locale/src/LocaleConfigSubscriber.php
@@ -119,10 +119,10 @@ public function onDelete(LanguageConfigOverrideCrudEvent $event) {
    *
    * @param \Drupal\language\Config\LanguageConfigOverrideCrudEvent $event
    *   The language configuration event.
-   * @param $callable
+   * @param callable $callable
    *   A callable to apply to each translatable string of the configuration.
    */
-  protected function updateTranslationStrings(LanguageConfigOverrideCrudEvent $event, $callable) {
+  protected function updateTranslationStrings(LanguageConfigOverrideCrudEvent $event, callable $callable) {
     $translation_config = $event->getLanguageConfigOverride();
     $name = $translation_config->getName();
 
@@ -149,7 +149,7 @@ protected function updateTranslationStrings(LanguageConfigOverrideCrudEvent $eve
    *   for the top-level schema and be populated consecutively when recursing
    *   into the schema structure.
    */
-  protected function traverseSchema(TraversableTypedDataInterface $schema, Config $source_config, LanguageConfigOverride $translation_config, $callable, $base_key = NULL) {
+  protected function traverseSchema(TraversableTypedDataInterface $schema, Config $source_config, LanguageConfigOverride $translation_config, callable $callable, $base_key = NULL) {
     foreach ($schema as $key => $element) {
       $element_key = implode('.', array_filter([$base_key, $key]));
 
diff --git a/core/modules/locale/src/StringDatabaseStorage.php b/core/modules/locale/src/StringDatabaseStorage.php
index ea4f12e..fcce985 100644
--- a/core/modules/locale/src/StringDatabaseStorage.php
+++ b/core/modules/locale/src/StringDatabaseStorage.php
@@ -138,7 +138,7 @@ public function save($string) {
    * @param \Drupal\locale\StringInterface $string
    *   The string object.
    */
-  protected function updateLocation($string) {
+  protected function updateLocation(StringInterface $string) {
     if ($locations = $string->getLocations(TRUE)) {
       $created = FALSE;
       foreach ($locations as $type => $location) {
@@ -175,7 +175,7 @@ protected function updateLocation($string) {
    * @param string $version
    *   Drupal version to check against.
    */
-  protected function checkVersion($string, $version) {
+  protected function checkVersion(StringInterface $string, $version) {
     if ($string->getId() && $string->getVersion() != $version) {
       $string->setVersion($version);
       $this->connection->update('locales_source', $this->options)
@@ -276,7 +276,7 @@ protected function dbFieldTable($field) {
    * @return string
    *   The table name.
    */
-  protected function dbStringTable($string) {
+  protected function dbStringTable(StringInterface $string) {
     if ($string->isSource()) {
       return 'locales_source';
     }
@@ -294,7 +294,7 @@ protected function dbStringTable($string) {
    * @return array
    *   Array with key fields if the string has all keys, or empty array if not.
    */
-  protected function dbStringKeys($string) {
+  protected function dbStringKeys(StringInterface $string) {
     if ($string->isSource()) {
       $keys = array('lid');
     }
@@ -466,7 +466,7 @@ protected function dbStringSelect(array $conditions, array $options = array()) {
    * @throws \Drupal\locale\StringStorageException
    *   If the string is not suitable for this storage, an exception ithrown.
    */
-  protected function dbStringInsert($string) {
+  protected function dbStringInsert(StringInterface $string) {
     if ($string->isSource()) {
       $string->setValues(array('context' => '', 'version' => 'none'), FALSE);
       $fields = $string->getValues(array('source', 'context', 'version'));
@@ -500,7 +500,7 @@ protected function dbStringInsert($string) {
    * @throws \Drupal\locale\StringStorageException
    *   If the string is not suitable for this storage, an exception is thrown.
    */
-  protected function dbStringUpdate($string) {
+  protected function dbStringUpdate(StringInterface $string) {
     if ($string->isSource()) {
       $values = $string->getValues(array('source', 'context', 'version'));
     }
@@ -531,7 +531,7 @@ protected function dbStringUpdate($string) {
    * @return \Drupal\Core\Database\Query\Delete
    *   Returns a new Delete object for the injected database connection.
    */
-  protected function dbDelete($table, $keys) {
+  protected function dbDelete($table, array $keys) {
     $query = $this->connection->delete($table, $this->options);
     foreach ($keys as $field => $value) {
       $query->condition($field, $value);
diff --git a/core/modules/locale/src/StringInterface.php b/core/modules/locale/src/StringInterface.php
index 046f414..2f8029b 100644
--- a/core/modules/locale/src/StringInterface.php
+++ b/core/modules/locale/src/StringInterface.php
@@ -7,6 +7,8 @@
 
 namespace Drupal\locale;
 
+use Drupal\locale\StringStorageInterface;
+
 /**
  * Defines the locale string interface.
  */
@@ -84,7 +86,7 @@ public function getPlurals();
    *
    * @return $this
    */
-  public function setPlurals($plurals);
+  public function setPlurals(array $plurals);
 
   /**
    * Gets the string storage.
@@ -102,7 +104,7 @@ public function getStorage();
    *
    * @return $this
    */
-  public function setStorage($storage);
+  public function setStorage(StringStorageInterface $storage);
 
   /**
    * Checks whether the object is not saved to storage yet.
diff --git a/core/modules/locale/src/StringStorageInterface.php b/core/modules/locale/src/StringStorageInterface.php
index 3d075bf..9fc7e63 100644
--- a/core/modules/locale/src/StringStorageInterface.php
+++ b/core/modules/locale/src/StringStorageInterface.php
@@ -7,6 +7,8 @@
 
 namespace Drupal\locale;
 
+use Drupal\locale\StringInterface;
+
 /**
  * Defines the locale string storage interface.
  */
@@ -112,7 +114,7 @@ public function findTranslation(array $conditions);
    * @throws \Drupal\locale\StringStorageException
    *   In case of failures, an exception is thrown.
    */
-  public function save($string);
+  public function save(StringInterface $string);
 
   /**
    * Delete string from storage.
@@ -126,7 +128,7 @@ public function save($string);
    * @throws \Drupal\locale\StringStorageException
    *   In case of failures, an exception is thrown.
    */
-  public function delete($string);
+  public function delete(StringInterface $string);
 
   /**
    * Deletes source strings and translations using conditions.
@@ -134,7 +136,7 @@ public function delete($string);
    * @param array $conditions
    *   Array with simple field conditions for source strings.
    */
-  public function deleteStrings($conditions);
+  public function deleteStrings(array $conditions);
 
   /**
    * Deletes translations using conditions.
@@ -142,7 +144,7 @@ public function deleteStrings($conditions);
    * @param array $conditions
    *   Array with simple field conditions for string translations.
    */
-  public function deleteTranslations($conditions);
+  public function deleteTranslations(array $conditions);
 
   /**
    * Counts source strings.
diff --git a/core/modules/locale/src/Tests/LocaleConfigSubscriberTest.php b/core/modules/locale/src/Tests/LocaleConfigSubscriberTest.php
index f3f7415..52f1682 100644
--- a/core/modules/locale/src/Tests/LocaleConfigSubscriberTest.php
+++ b/core/modules/locale/src/Tests/LocaleConfigSubscriberTest.php
@@ -317,11 +317,11 @@ protected function deleteLocaleTranslationData($config_name, $key, $source_value
   /**
    * Ensures configuration was saved correctly.
    *
-   * @param $config_name
+   * @param string $config_name
    *   The configuration name.
-   * @param $key
+   * @param mixed $key
    *   The configuration key.
-   * @param $value
+   * @param mixed $value
    *   The configuration value.
    *
    * @return bool
