Term translations not working as View's path contextual filter
Implementing hook_language_switch_links_alter() is definitely the way to go.  Here is the code along with two (2) helper functions, assuming there are display variants for each language.

/**
 * Implements hook_language_switch_links_alter().
 *
 * This is a workaround for Path Translation not supporting Views' contextual filters.
 * Alter the language switcher to switch between path/to/[term] and different
 * paths for different languages.
 */
function mymodule_language_switch_links_alter(array &amp;$links, $type, $path) {

  // Load the current view if there is one.
  $view = views_get_page_view();

  // Act only if we're looking at the view in question.
  if (($type == "language_content") &amp;&amp; isset($view) &amp;&amp; ($view-&gt;name == 'myview')) {

    // Skip situations where there's no argument.  This is handled by Path Translatoon.
    if (isset($view-&gt;args[0]) &amp;&amp; ($view-&gt;args[0] != mymodule_get_myview_view_all_term($view))) {

      // Iterate across all language links.
      $language_active = $GLOBALS['language']-&gt;language;
      $displays = mymodule_get_myview_view_language_displays();
      foreach ($links as $language_current =&gt; &amp;$link) {

        // Skip the active language.
        if ($language_current == $language_active) {
          continue;
        }

        // Set the path for the current language.
        $path = $view-&gt;display[$displays[$language_current]]-&gt;display_options['path'];
        $link['href'] = strtok($path, '/') . '/' . $view-&gt;args[0];
      }
      // Break the foreach reference.
      unset($link);
    }
  }
}

/**
 * Returns the list of displays for the view in question, keyed by language.
 *
 * @return array
 *   The list of displays.
 */
function mymodule_get_myview_view_language_displays() {
  return array(
    'en' =&gt; 'page_myview_en',
    'fr' =&gt; 'page_myview_fr',
  );
}

/**
 * Get the language-specific term representing all items.
 *
 * @param view $view
 *   The previously loaded view in question.  Optional.
 * @return string
 *   The term.  If there's no translation in the current language, "all" is used.
 */
function mymodule_get_myview_view_all_term($view = NULL) {

  // Load the view if it wasn't provided.
  $view = (is_null($view) ? views_get_view('myview') : $view);

  // Get the current language and the display names for each defined language.
  $language = $GLOBALS['language']-&gt;language;
  $displays = mymodule_get_myview_view_language_displays();

  // Return the language's "all" term, or the default if there isn't one.
  if (isset($view-&gt;display[$displays[$language]]-&gt;display_options['arguments']['tid']['exception']['value'])) {
    return $view-&gt;display[$displays[$language]]-&gt;display_options['arguments']['tid']['exception']['value'];
  }
  else {
    return 'all';
  }
}


Note that this doesn't handle the translation of the term itself within the path, only the part of the path leading up to it.  For now, that will always be in the default language. This is the separate issue Views contextual filter validation: Support ET-translated taxonomy term name.